MySQL复制 自动监控脚本
MySQL复制 自动监控脚本
#!/bin/sh # # created by yejr, 2007/06/03 # # 本脚本用于监控MySQL 复制是否运行,并且根据具体的错误代码自动判断是否忽略 # now=`date +"%Y%m%d%H%M%S"` StatFile="./slave_status.$now" echo "show slave status\G" | mysql -uroot -pmypasswd > $StatFile #取得 io_thread, sql_thread, last_errno 的状态 IoStat=`cat $StatFile | grep Slave_IO_Running | awk '{print $2}'` SqlStat=`cat $StatFile | grep Slave_SQL_Running | awk '{ print $2}'` Errno=`cat $StatFile | grep Last_Errno | awk '{print $2}'` Behind=`cat $StatFile | grep Seconds_Behind_Master | awk '{print $2}'` #IoStat=`cat $StatFile | head -n 12 | tail -n 1 | awk '{print $2}'` #SqlStat=`cat $StatFile | head -n 13 | tail -n 1 | awk '{print $2}'` #Errno=`cat $StatFile | head -n 20 | tail -n 1 | awk '{print $2}'` if [ $IoStat = 'No' ] || [ $SqlStat = 'No' ] ; then echo "[chkslave]" date #如果错误代码为 0,则可能是因为网络等原因导致复制中断,直接重新启动复制即可 if [ "$Errno" -eq 0 ] ; then echo "start slave io_thread; start slave sql_thread;" | mysql -uroot -pmypasswd echo "start slave io_thread; start slave sql_thread;" #如果是一些不是很要紧的错误代码,也可以直接略过 elif [ "$Errno" -eq 1007 ] || [ "$Errno" -eq 1053 ] || [ "$Errno" -eq 1062 ] || [ "$Errno" -eq 1213 ] \ || [ "$Errno" -eq 1158 ] || [ "$Errno" -eq 1159 ] || [ "$Errno" -eq 1008 ] ; then echo "stop slave; set global sql_slave_skip_counter=1; slave start;" | mysql -uroot -pmypasswd echo "stop slave; set global sql_slave_skip_counter=1; slave start;" else echo `date` "slave is down!!!" fi # 远远落后于 master if [ $Behind -gt 200 ] ; then echo `date` "slave is behind master $Behind seconds!!!" fi #删除临时状态文件 rm -f $StatFile echo "[/chkslave]" fi
本脚本在 linux/freebsd 平台下均试验过。
评论
yejr
周四, 2007/06/14 - 13:32
Permalink
修改了一下,直接采
修改了一下,直接采用 grep Slave_IO_Running 的方式取得状态,更具灵活性。
MySQL方案、培训、支持
给你的祝福,要让你招架不住!
游客 (未验证)
周四, 2007/08/23 - 15:14
Permalink
斑竹你这代码没有调
斑竹你这代码没有调试过吧,
我的slackware 11+mysql 5.1.18 beta里面运行后没有任何回应。只能ctrl+c停掉。
发现有这样的语句: mysql --uroot 无法在我这里运行。
root@st_server18:~# echo "start slave io_thread; start slave sql_thread;" | mysql --uroot
mysql: unknown option '--uroot'
yejr
周四, 2007/08/23 - 16:44
Permalink
多谢指出,是个语法
多谢指出,是个语法错误
MySQL方案、培训、支持
MySQL 用户组
cybersingle
周二, 2008/06/17 - 11:17
Permalink
Behind=`cat $SlaveStatFile |
Behind=`cat $SlaveStatFile | grep Seconds_Behind_Master | awk '{print $2}'`
这段应该是$StatFile 就能解决必需ctrl+c退出的问题了
yejr
周二, 2008/06/17 - 11:23
Permalink
嗯,整理的时候没把
嗯,整理的时候没把这个改过来,谢谢 :)
MySQL方案、培训、支持
yejr
周一, 2007/08/13 - 10:26
Permalink
增加一个新的监控参
增加一个新的监控参数: Seconds_Behind_Master,判断slave落后于master多少秒。
MySQL方案、培训、支持
MySQL 用户组
左扬 (未验证)
周二, 2008/03/18 - 18:27
Permalink
Seconds_Behind_Master这个
Seconds_Behind_Master这个值有可能是NULL,
此时
if [ $Behind -gt 200 ] 会有问题。
yejr
周二, 2008/03/18 - 20:50
Permalink
上面已经判断
上面已经判断 SQL_Running , IO_Running 是否为 Yes 了,一般情况下,不会碰到你所说的情况
MySQL方案、培训、支持
MySQL 用户组
一个程序员 (未验证)
周三, 2013/05/15 - 13:07
Permalink
谢谢您的分享。
谢谢您的分享。