视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
shell监控MySQL主从状态脚本两则
2020-11-09 12:44:14 责编:小采
文档

内容为自己的一点总结,如有不对欢迎狠劲儿拍砖本文来自http://yijiu.blog.51cto.com/转载请经博主同意监控主从复制正常与否相比各位都应该知道,监控主从是否工

内容为自己的一点总结,如有不对欢迎狠劲儿拍砖

本文来自转载请经博主同意

监控主从复制正常与否

相比各位都应该知道,监控主从是否工作正常,涉及命令如下:

show slave status\G;

那么,我们需要关注的参数如下:

1. 首先查看SQL和IO线程是否为YES状态(想必各位都明白了)

2. 是否有延迟 是否大于0 #一般生成环境延迟是否大于500秒,如果大于500则报警,如大于1000则严重报警

#比如传递一个sql到slave上,,binlog中在eventhear中存在time stamp时间戳,在下条binlog拿到的时间会进行比较,如果当前时间是多少则显示多少,如果更新非常频繁500秒会产生更多的sql积累在其中

至少生产中监控就是这么实现的以及包括nagios的监控插件也是这么实现的


主要关注的值本文来自转载请经博主同意,

1. Master_Log_File Read_master_log_Pos 2. Relay_Master_Log_File Exec_Master_log_pos 3. Seconds_Behind_master

判断一个库主要观察以上几点,如果主库挂了,Seconds_Behind_master 会已经成为NULL了

那么这样如何去观测从库是否日志同步完成,如下所示


通过shell实现监控同步的方法

废话不多说了直接上菜

1.利用status去观测是否已经同步完成

判断公式

以下为判断依据,判断以下值

Master_Log_File 和 Relay_Master_Log_File 的值必须相等

判断同步的偏移量

Read_master_log_Pos 和 Exec_Master_log_pos 的值必须相等

根据以上为最基础的判断依据,是否可将其从库提升为主库,就会在从库中判断master log file 是否读到的位置一样并找到一个最靠前的一个节点提升为主

shell内容如下所示:本文来自转载请经博主同意

#!/bin/bash user='root' password='mypass' thread_status=`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql_3308.sock -e 'show slave status\G'|grep -i yes|wc -l` status=(`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql_3308.sock -e 'show slave status\G'| egrep -i "Master_Log_File|Relay_Master_Log_File|Read_master_log_Pos|Exec_Master_log_pos|Seconds_Behind_Master" |awk -F':' '{print $2}'`) echo ${status[4]} if [[ "$thread_status" != 2 ]]; then echo "the Replication is Fault , at $(date)" > $catalog echo `uname -n` | mail umail@qq.com < $catalog exit 1 fi if [[ "${status[4]}" > '300' ]];then echo "yan chi guo gao, at $(date)" > $catalog echo `uname -n` | mail umail@qq.com < $catalog exit 2 fi if [[ ${status[0]} == ${status[2]} ]] && [[ ${status[1]} == ${status[3]} ]]; then echo 'The Replication is Normal' exit 0 else echo "the Replication is Fault , at $(date)" > $catalog echo `uname -n` | mail umail@qq.com < $catalog exit 2 fi

如果时间一样则认为正常,如果master上的时间减去slave上的时间 出现了延迟,那么证明延迟存在的,但是这种方法存在缺陷,比如主库挂了那么则不可用

#!/bin/bash user='root' password='mypass' /usr/local/mysql/bin/mysql -u"$user" -p"$password" -e 'replace into master.repl_heart set t=now(),id=1;' >/dev/null 2>&1 master_select=`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql.sock -e 'select t from master.repl_heart where id=1;' | awk '{print $2}' | tail -1` slave_select=`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql_3308.sock -e 'select t from master.repl_heart where id=1;' | awk '{print $2}' | tail -1` master_date=`date -d "$master_select" +%s` slave_date=`date -d "$slave_select" +%s` delay=`echo "$master_date"-"$slave_date" | bc` if [[ $master_date == $slave_date ]];then echo 'is ok' elif [[ $delay -le 500 ]];then echo cun zai yan chi "$delay" else echo "the Replication delay too large "$delay" , at $(date)" > $catalog echo `uname -n` | mail umail@qq.com < $catalog fi

需要注意的是:复制中,如果是行格式,就是主库的时间;如果不是行式,这个方法可以把now()这个内置函数在s脚本中生成再写入


以上,为监控mysql主从的两种shell的写法,如有不足,麻烦指出,感谢各位











本文出自 “心情依旧” 博客,转载请与作者联系!

下载本文
显示全文
专题