维护小型服务器时我们经常会遇到mysql服务器停止的情况。
一般情况是由于服务器内存不足,或者是非正常请求导致mysql服务器停止工作。
如果是半夜宕机,或者是我们不能及时发现的话,是很尴尬的一件事情。
解决方法:要么提高服务器配置,要么重新设置一下mysql参数。
或者mysql停止服务的情况不是很频繁的情况下,我们可以重启已停止的mysqld进程。
比如,每5分钟监测一下mysql的状态。如果已停止,重启一下就ok了。
那么,请看下面的文章:

本文示例测试环境:
CentOS 6.8
MySQL 5.6.35

使用shell脚本编写脚本文件

通过ssh通过远程登录服务器。ssh客户端软件有:putty。
 
首先创建shell脚本文件。随便在什么位置都可以,总之记住该文件的位置,在后面会用到。

cd /www/mysql
touch listen.sh

 
通过vi命令打开该脚本文件:

vi listen.sh

 
添加以下shell脚本内容:
* 注意:下面的代码中if后面要有空格,获取时间用的date两边用的是Tab键上面的那个点,不是单引号。

#!/bin/bash
pgrep mysqld &> /dev/null
if [ $? -gt 0 ]
then
echo "`date` mysql server is stoped." >> /var/log/mysql_listen.log
service mysqld start
else
echo "`date` mysql server is running." >> /var/log/mysql_listen.log
fi

然后,esc键 :wq 保存并退出。
其中:
pgrep mysqld 是监测 mysqld 服务的运行状态,
&> /dev/null 是将其结果输出到一个空文件,相当于不保存内容。
$? 是获取上一条命令的运行结果(值),
-gt 0 判断获取的值是否大于0。
如果是大于零,echo 内容“`date` mysql server is stoped.”,并且将此内容保存在/var/log/mysql_listen.log日志文件中,该日志文件事先不用特意创建。同时,启动 mysqld 服务。
如果是小于等于零,echo “`date` mysql server is running.” 将输出的内容保存到日志文件中。
 
文件创建完毕了,我们需要测试一下是否好用,我们首先要对该文件进行权限设置。增加可执行的权限。

sudo chmod 777 listen.sh

 
然后执行该文件:

./listen.sh

如果没有报错,我们可以在日志文件中看到类似于:(日期,时间)mysql server is running. 这样的字样。
查看方法:

cat /var/log/mysql_listen.log

 
我们可以试着停止mysqld服务。然后执行我们做的脚本,看看能不能启动服务。

service mysqld stop
./listen.sh

如果没有报错,我们可以在日志文件中看到类似于:(日期,时间)mysql server is stoped. 这样的字样。日期时间是刚刚执行脚本的时间。
到此,shell脚本文件制作完毕。记住,上面的示例中我们把shell脚本文件保存在了/www/mysql 下。
 

添加计划任务

我们做好了脚本文件,但是想要执行它需要一个计划任务,你是想每分钟执行一次还是每天执行一次?这里就需要用到计划任务。

service crond

如果报错,可能是没有安装crond服务。如果有使用提示,那么就已经安装好了。

如果没有安装,安装方法:

yum install vixie-cron
yum install crontabs

 
如果已安装好:

crontab -e

输入:

*/5 * * * * /www/mysql/listen.sh

说明:/5代表五分钟执行一次,后面的四个点依次代表了,小时,日,月,星期。比如需要每一个小时执行一次,那就设置一下/5后面第一个*就好了。
保存好后重启一下crond服务。

service crond restart

 
过一段时间我们可以过来看看。

cat /var/log/mysql_listen.log

 
如果列表中有N行(日期,时间)mysql server is running. 这样的字样就证明计划任务成功了。