Centos crond定时监测MYSQL并自动重启服务

来源:csdn博客 分类: 文章浏览史 发布时间:2020-05-06 22:03:01 最后更新:2020-05-06 浏览:228
转载声明:
本文为摘录自“csdn博客”,版权归原作者所有。
温馨提示:
为了更好的体验,请点击原文链接进行浏览
摘录时间:
2020-05-06 22:03:01

学生机的配置有点低,在上面部署了一些项目,并发量大一点MYSQL很容易就被 kill掉了,所以写一个自动监测的脚本,挂了之后就自动 启动 MYSQL服务

过程

以下操作都是基于root用户
  1. 新建目录,日志及脚本
cd /home
mkdir check
touch mysql.log
touch restart_mysql.sh
chmod 777 mysql.log restart_mysql.sh
  1. 编写脚本
vim restart_mysql.sh
#!/bin/bash
cur_time="`date +%y-%m-%d,%H:%M:%S`"
pgrep -x mysqld &> /dev/null

if [ $? -ne 0 ]
then
echo "At time:$cur_time MYSQL is stop">> /home/check/mysql.log
systemctl start mysqld

else
echo "MYSQL server is running..."

fi
  1. 编写crond监控
crontabl -e //进入编写

*/2 * * * * /home/check/restart_mysql.sh

保存退出 后执行 service crond restart即可

总结

在上面过程的第2、3点中,有几点要注意的

  1. 写入 mysql.log 以及 执行 restart_mysql.sh脚本时写的路径都应该是 绝对路径,我一开始写的都是相对路径,直接./restart_mysql.sh时 没有问题,能够写入mysql.log中,但是当crond来监测并执行时,就没反应了,后来都改成了绝对路径才可以
    修改建议:

    1. 使用相对路径:要在脚本开头 cd 到 mysql_log所在目录下
    2. 使用绝对路径(强烈推荐):使用绝对路径就和过程写的一样,另外,在脚本开头,尽量先引入环境变量source /etc/profile; source ~/.bash.profile,因为你加到cron计划任务后,它并不是以root身份执行的,可能你用root来测试的时候一些命令可以用,但是加到了cron中那些命令就不能用了,因为用户的PATH变量都不一样。
  2. 重启MySQL服务那里,不能够写成 service mysql start,否则会提示:Failed to start mysqld.service: Unit not found的错误,原因是在CentOS7中已经不在支持mysql,就算你已经安装了。。
    所以改为 systemctl start mysqld即可

附加

MYSQL OOM
降低MYSQL被kill的几率的方法:

  1. 合理的规划MySQL的内存使用。
  2. 调整OOM_adj参数,将MySQL被OOM_Killer锁定的优先级降低。
  3. 加强内存的监控和报警,一旦报警,DBA应该迅速介入,Kill掉一些占用较多内存的连接。
php技术微信