近期发现服务器上MySQL又经常宕机了,平均每周一次,应该和最近新挂上去的几个WordPress网站有关,毕竟一台配置不算豪华的主机上挂了10个WP网站,压力太大难免会内存不够造成宕机。每次宕机都需要自己重启MySQL也比较麻烦,如果是客户自己发现的,感觉更不好,所以网上找了个无人值守的脚本先用起来。
首先先建立一个脚本文件checkmysql.sh,内容如下
#!/bin/bash #/usr/bin/nmap localhost | grep 3306 #lsof -i:3306 MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'` function checkMysqlStatus(){ /usr/bin/mysql -uroot -p11111 --connect_timeout=5 -e "show databases;" &>/dev/null 2>&1 if [ $? -ne 0 ] then restartMysqlService if [ "$MYSQLPORT" == "3306" ];then echo "mysql restart successful......" else echo "mysql restart failure......" echo "Server: $MYSQLIP mysql is down, please try to restart mysql by manual!" > /var/log/mysqlerr mail -s "WARN! server: $MYSQLIP mysql is down" xxx@xxx.com < /var/log/mysqlerr fi else echo "mysql is running..." fi } function restartMysqlService(){ echo "try to restart the mysql service......" /bin/ps aux |grep mysql |grep -v grep | awk '{print $2}' | xargs kill -9 service mysql start } if [ "$MYSQLPORT" == "3306" ] then checkMysqlStatus else restartMysqlService fi
以上xxx@xxx.com替换成自己的邮箱地址,如果MySQL重启失败可以收到提醒邮件。
把该文件上传到服务器上,我的对应位置是/root/lnmp1.4/tools/checkmysql.sh
之所以上传这个位置是因为这里还存放了lnmp作者写的其他几个维护脚本,以后找起来也方便
上传完毕后,打开服务器上的/etc/crontab 定时任务文件,在最底下加一行并保存,我设置了每20分检查一次:
*/20 * * * * root /bin/bash /root/lnmp1.4/tools/checkmysql.sh
然后添加这个脚本文件的执行权限,命令
chmod +x /root/lnmp1.4/tools/checkmysql.sh
最后重启一下定时任务:
service crond restart
大功告成。过段时间再回来看看日志文件,是否宕机频繁,如果重启的比较多,就要给云主机加配置咯!
Linux计划任务相关知识我参考了这个链接:https://www.cnblogs.com/xd502djj/p/4292781.html
----------------------
2019年10月14日更新
复盘以上这篇文章,由于checkmysql脚本是网上抄的,并没有好好验证过邮箱是否能发送邮件。其实是不能发送的,因为现在服务器的这个功能其实一直是被严控以防止乱用。于是换一个简单点的脚本:
#!/bin/bash pgrep -x mysqld &> /dev/null if [ $? -ne 0 ] then echo "At time: `date` :MySQL is stop .">> /home/wwwlogs/mysql_messages service mysql start #echo "At time: `date` :MySQL server is stop." else echo "MySQL server is running ." fi
脚本文件上传完毕后,先试运行一下这个脚本,发现有报错
还需用VM打开这个脚本文件,输入命令
:set ff=unix
修改其格式,这个脚本才可以被自动执行。
然后运行以下命令生成一个空白的日志文件:
vim /home/wwwlogs/mysql_messages
然后退出VM即可。
如果想偷个懒还可以把此脚本直接存到/etc/cron.hourly/ 目录下,这样每小时就会自动执行一次,不用修改crontab设置了。
也要设置权限:
chmod +x /etc/cron.hourly/checkmysql.sh
隔一段时间检查一下mysql_messages是否有频繁的报错记录再决定是否给主机加配。
本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.brain1981.com/2012.html。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
您也可以扫描左边的二维码,关注我们的微信公众号,在微信上查看我们的案例。