学生机的配置有点低,在上面部署了一些项目,并发量大一点MYSQL很容易就被 kill掉了,所以写一个自动监测的脚本,挂了之后就自动 启动 MYSQL服务
过程
以下操作都是基于root用户
- 新建目录,日志及脚本
cd /home
mkdir check
touch mysql.log
touch restart_mysql.sh
chmod 777 mysql.log restart_mysql.sh
- 编写脚本
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
- 编写crond监控
crontabl -e //进入编写
*/2 * * * * /home/check/restart_mysql.sh
保存退出 后执行 service crond restart
即可
总结
在上面过程的第2、3点中,有几点要注意的
-
写入 mysql.log 以及 执行 restart_mysql.sh脚本时写的路径都应该是 绝对路径,我一开始写的都是相对路径,直接./restart_mysql.sh时 没有问题,能够写入mysql.log中,但是当crond来监测并执行时,就没反应了,后来都改成了绝对路径才可以
修改建议:- 使用相对路径:要在脚本开头 cd 到 mysql_log所在目录下
- 使用绝对路径(强烈推荐):使用绝对路径就和过程写的一样,另外,在脚本开头,尽量先引入环境变量source /etc/profile; source ~/.bash.profile,因为你加到cron计划任务后,它并不是以root身份执行的,可能你用root来测试的时候一些命令可以用,但是加到了cron中那些命令就不能用了,因为用户的PATH变量都不一样。
-
重启MySQL服务那里,不能够写成
service mysql start
,否则会提示:Failed to start mysqld.service: Unit not found
的错误,原因是在CentOS7中已经不在支持mysql,就算你已经安装了。。
所以改为systemctl start mysqld
即可
附加
MYSQL OOM
降低MYSQL被kill的几率的方法:
- 合理的规划MySQL的内存使用。
- 调整OOM_adj参数,将MySQL被OOM_Killer锁定的优先级降低。
- 加强内存的监控和报警,一旦报警,DBA应该迅速介入,Kill掉一些占用较多内存的连接。