前言
最近发现 MySQL 服务隔三差五就会挂掉,导致我的网站和爬虫都无法正常运作。自己的网站是基于 MySQL,在做爬虫存取一些资料的时候也是基于 MySQL,数据量一大了,MySQL 它就有点受不了了,时不时会崩掉,虽然我自己有网站监控和邮件通知,但是好多时候还是需要我来手动连接我的服务器重新启动一下我的 MySQL,这样简直太不友好了,所以,我就觉定自己写个脚本,定时监控它,如果发现它挂掉了就重启它。 好了,闲言碎语不多讲,开始我们的配置之旅。 运行环境:Ubuntu Linux 14.04
编写 Shell 脚本
首先,我们要编写一个 shell 脚本,脚本主要执行的逻辑如下: 显示 mysqld 进程状态,如果判断进程未在运行,那么输出日志到文件,然后启动 mysql 服务,如果进程在运行,那么不执行任何操作,可以选择性输出监测结果。 可能大家对于 shell 脚本比较陌生,在这里推荐官方的 shell 脚本文档来参考一下 Ubuntu Shell 编程基础 shell 脚本的后缀为 sh,在任何位置新建一个脚本文件,我选择在 /etc/mysql 目录下新建一个 listen.sh 文件。 执行如下命令:
1 |
cd /etc/mysql |
进入到 vi 中,我们添加如下脚本内容:
1 |
|
其中 pgrep mysqld 是监测 mysqld 服务的运行状态,&> /dev/null 是将其结果输出到空文件,也就是不保存输出信息 $? 是拿到上一条命令的运行结果,-gt 0 是判断是否大于 0,后面则是输出时间到日志文件,然后启动 mysql,否则不启动 mysql 保存好了,那么我们执行如下的命令,来测试一下。 贴心的命令文字版本:
1 |
root@iZ28uogb3laZ:/etc/mysql# vi listen.sh |
嗯,编辑完了.sh 文件之后,我们首先要对其进行授权,增加可执行的权限。
1 |
sudo chmod 777 listen.sh |
然后运行脚本测试一下,显示 mysql 正在运行。把 mysql 关掉,运行脚本,便会检测到 mysql 已关闭,然后重新启动了 mysql,再次运行,便会发现 mysql 正常运行了。 注:这里我比较纳闷 shell 脚本中 pgrep mysqld 的返回结果是什么。为什么它大于 0 便代表 mysql 服务挂掉了呢?感觉逻辑有点是相反的,不过实测可用有效。如果大家明白为什么,非常希望您可以给我一个解释。
修改日志输出
好,接下来我们把输出的内容保存到日志里。修改脚本文件如下
1 |
|
这样,每执行一次脚本,输出结果都会被保存到 /var/log/mysql_listen.log 中了。
添加定时任务
好了,脚本可以顺利执行了,那么我们就需要定时调用一下这个脚本来运行了,我们需要用到 cron。 首先我们需要编辑一下 corn 调度表格,命令如下:
1 |
crontab -e |
如果你是第一次编辑这个,他会让你选择文件打开方式,随便选一个数字就好了。 比如我们用 GNU 打开的,我们就在它的最后一行添加下面的一句话即可。 、 文字版本:
1 |
*/5 * * * * /etc/mysql/mysql_listen.sh |
/5 代表五分钟执行一次,后面的四个点依次代表了,小时,日,月,星期。如果想要时间长一些,比如一小时调度一次,那就设置一下后面第一个*就好了。 好,保存一下,重启 cron 服务。
1 |
service cron restart |
嗯,调度任务已经添加进去了,这样,每五分钟系统就会调用一下刚才写的那个脚本。 过一段时间,我们来看一下运行效果,嗯,监控跑的很顺利呐。 文字版本:
1 |
Sun Aug 16 15:39:12 CST 2015 mysql running |
哈哈,是不是五分钟监测了一次呢?大功告成。
后记
这样,我们就实现了五分钟定时检测 MySQL 进程服务,妈妈再也不用担心我的网站会宕掉啦。 如有问题,欢迎留言交流,谢谢啦。