当服务器内存特别小,往往在网站访问量大的时候就会导致服务器的nginx进程过多,之后导致mysql服务被自动关闭。

所以,做了一个脚本,能够自动监控服务器mysql的状态,如果发现进程关闭就自动重启。

shell脚本如下:

#!/bin/bash

checkMysql(){
    CMDCHECK=`lsof -i:3306 &>/dev/null`
    Port="$?"
    PIDCHECK=`ps aux|grep mysqld|grep -v grep`
    PID="$?"
    if [ "$Port" -eq "0" -a "$PID" -eq 0 ];then
            return 200
    else
            return 500
    fi
}
startMysql(){
    /etc/init.d/mysql start
}
checkMysql
if [ $? == 200 ];then
    echo "Mysql is running..."
else
    startMysql
    checkMysql
    if [ $? != 200 ];then
            while true
            do
                    killall mysqld
                    [ $? != 0 ] && break
                    sleep 2
            done
            startMysql
    fi
fi

直接复制过去,在服务器上建立一个mysql-listen.sh的文件,

然后为这个文件添加可执行权限

chmod a+x mysql-listen.sh

然后先检查一下这个脚本是否可用,先关闭服务器的mysql

service mysql stop

然后访问你的网址,如果出现数据库连接失败说明数据已经关闭了,然后运行这个脚本

bash mysql-listen.sh

然后看是否有信息说明服务器已经正在运行mysql且提供一个进程号。

我在这个阶段出了错误,首先是没有改权限导致并有没有权限去启动mysql,其次启动mysql的命令在不同服务器上有时候是不一样的,有的是
/etc/init.d/mysql start
部分的可能是
systemctl start mysql

接下来需要让这个脚本隔一段时间自动运行。

使用crontab -e在最后一行补上

*/5 * * * *  bash /root/mysql-listen.sh

这里/5中的5 是指5分钟一次。 后面是4个代表小时,日,月,星期。最后是你脚本的路径。

保存后退出。

这样就会每隔5分钟,执行一次检测mysql的脚本。

Last modification:April 13th, 2020 at 04:08 pm
如果觉得我的文章对你有用,请随意赞赏