维护小型服务器时我们经常会遇到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. 这样的字样就证明计划任务成功了。