日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

用shell获取mysql主从状态_shell监控MySQL主从状态脚本两则

發布時間:2024/9/18 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用shell获取mysql主从状态_shell监控MySQL主从状态脚本两则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內容為自己的一點總結,如有不對歡迎狠勁兒拍磚

本文來自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的監控插件也是這么實現的

主要關注的值本文來自http://yijiu.blog.51cto.com/轉載請經博主同意,

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內容如下所示:本文來自http://yijiu.blog.51cto.com/轉載請經博主同意

#!/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

本文來自http://yijiu.blog.51cto.com/轉載請經博主同意

2.依賴于程序檢測 本文來自http://yijiu.blog.51cto.com/轉載請經博主同意

比如程序在master建立表,并隨意設置字段,并在master上獲取一個時間并寫入

now的時間在程序中自行得到并記錄,最后在slave中執行select 查看結果是否與時間對應一致

如果時間一樣則認為正常,如果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的寫法,如有不足,麻煩指出,感謝各位

?著作權歸作者所有:來自51CTO博客作者zuzhou的原創作品,如需轉載,請與作者聯系,否則將追究法律責任

mysql監控mysql主從主從監控運維自動化相關

總結

以上是生活随笔為你收集整理的用shell获取mysql主从状态_shell监控MySQL主从状态脚本两则的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。