之前写了一篇在每天凌晨2:30重启一次MySQL的文章:http://1vr.cn/?p=1818,用了一段时间感觉没什么异常,但今天又出现了数据库非正常关闭,真是头疼,看了下日志(终端输入:tail -f /var/log/mysqld.log),时间还在在2:30之前,不知道什么异常导致,看来有时间还是要彻底查查原因.
170703 0:41:54 InnoDB: Database was not shut down normally! InnoDB: Starting crash recovery. InnoDB: Reading tablespace information from the .ibd files... InnoDB: Restoring possible half-written data pages from the doublewrite InnoDB: buffer... InnoDB: Doing recovery: scanned up to log sequence number 0 22991466 170703 0:41:54 InnoDB: Started; log sequence number 0 22991466 170703 0:41:54 [Note] Event Scheduler: Loaded 0 events 170703 0:41:54 [Note] /usr/libexec/mysqld: ready for connections.
在彻底查到原因之前先打个速效针吧,找了一段bash shell脚本,判断mysql服务的状态,如果没有运行,则重启mysql.
脚本放哪无所谓,能找到就行,用”vim /etc/checkmysql.sh”创建个新文件,名为checkmysql.sh,放在了etc目录下.
#!/bin/bash pgrep -x mysqld &> /dev/null if [ $? -ne 0 ] then echo "Time: `date` :MySQL is over .">> /var/log/mysql_messages service mysqld start else echo "MySQL server is running." fi
输入”:wq”保存并退出文件,测试一下文件效果,使用”./checkmysql.sh”或绝对路径”/etc/checkmysql.sh”,可以当前Mysql状态,如已停止,那么尝试启动它.如果脚本文件权限不对,改它权限为655,命令是”chmod -R 655 checkmysql.sh”.
接下来我们需要定时的执行这个脚本,让它帮助我们监测mysql状态.还是用到了crontab,之前的文章里有比较详细的用法,这里简单说明,我要做的是让脚本3分钟执行一次,那么打开crontab编辑(命令:vim /etc/crontab):
井号注释掉之前的每天2:30重启任务,添加下面这样
*/3 * * * * root /etc/checkmysql.sh
“*/3″代表每间隔三分钟执行一次,如果你要五分钟执行一次,那就是”*/5″喽.
保存后重启crontab即可(命令:service crond restart),如果你要测试效果,可以service mysqld stop,几分钟后看mysql是否自启.
原创文章,转账请注明来自 http://1vr.cn,By XK.