1. 程式人生 > >Linux上MySQL主從同步監控指令碼實現

Linux上MySQL主從同步監控指令碼實現

    之前公司的B2B平臺的MySQL我給配了主從同步,所謂主從同步,也叫主從複製,等等,就是將主伺服器上的資料庫和一臺備用伺服器上的資料庫做同步,主伺服器的資料更新通過MySQL的binlog同步到從伺服器,通過主從同步還可以做資料庫的讀寫分離,由於公司B2B平臺業務非常少尷尬,所以並沒做完全的讀寫分離,即將主資料庫資料更新同步到從資料庫。除此之外,還做了主從雙向同步,因為從伺服器上布了郵件服務,又定時任務掃描表傳送郵件,並更新郵件狀態,所以從資料庫也有這一點寫的操作,所以也就做了主從雙向同步。剛配置好的時候沒想太多,但後來遇到些問題,比如一方在寫入的時候出現了問題導致主從同步就斷開了(但這時我還不知道驚恐

,導致公司業務小姐姐問我為什麼詢盤感覺少了,我趕緊看資料庫再一看slave狀態,竟然斷開有幾天了。。還好公司業務量少尷尬),然後我就在想,應該給主從同步做監控,並且自動恢復,傳送郵件給我,於是就有了這篇部落格的由來,記錄一番。

    嘿嘿,下面就是指令碼,其實思路很簡單,檢視MySQL主從狀態應該都會,就是進入MySQL,然後show master status和show slave status \G,然後我要做的其實就是通過指令碼定時進入MySQL然後檢視狀態得到資訊,再通過grep和awk對文字進行解析,然後關鍵的slave_sql_running、slave_io_running和last_error,最後按一定格式列印到日誌裡。ps:網上找了一些指令碼,但都不能用大哭

,只好自己學習了grep和awk的用法,學藝不精,湊合用應該可以,歡迎指摘偷笑

#!/bin/sh
# monitor_mysql_slave status
ip=192.168.1.191
cmd=/usr/bin/mysql
mysqluser=user
mysqlpwd=password
log=/mnt/b2bhome/log/mysql-monitor/monitor.log
while true
do
  datetime=`date '+%Y-%m-%d %H:%M:%S'`
  # echo $datetime
  array=$($cmd -u$mysqluser -p$mysqlpwd -e "show slave status\G"|grep -iE "_running|last_error")
  # echo $array
  io_running=`echo $array|grep -i slave_io_running|awk '{print $2}'`
  # echo $io_running
  sql_running=`echo $array|grep -i slave_sql_running|awk '{print $2}'`
  # echo $sql_running
  last_error=`echo $array|grep -i last_error|awk '{print $2}'`
  # echo $last_error
  if [ "$io_running" == "Yes" -a "$sql_running" == "Yes" ]
  then
    echo "$datetime | OK | Slave is running!" >> $log
  else
    echo "$datetime | FAIL | Slave is not running!" >> $log
    echo "$datetime | FAIL | $last_error" >> $log
    $cmd -u$mysqluser -p$mysqlpwd -e "stop slave;set global sql_slave_skip_counter=1;start slave;exit;"
    char="$datatime $ip MySQL slave is not running"
    echo "$last_error"|mail -s "$char" 1******
[email protected]
break fi sleep 20 done

前面ip、cmd、mysqluser、mysqlpass、log都是定義的常量,本機ip啊,mysql的命令目錄啊,mysql使用者密碼啊,輸出日誌檔案啊,下面的shell就是先登入MySQL,再查詢從機狀態,並將slave_io_running、slave_sql_running、last_error的值存在array字串中通過grep對array進行篩選,-i代表不區分大小寫,篩選出包含上述欄位的行,此時篩選出的結果是Key:Value的形式,然後再通過awk進行解析,print $2代表第二個位置的欄位,而像:這樣的特殊符號會被認為是分隔符,所以value就是$2,這樣就取到了。最後對slave_io_running和slave_sql_running進行判斷,只有他倆都為yes才是正常狀態,輸出ok日誌,否則,輸出fail日誌,並進入MySQL,關掉slave,設定sql_slave_skip_counter為1,即跳過錯誤的這一行binlog,再重新開啟slave,並呼叫Linux系統的sendmail服務傳送郵件給我。對了,sleep 20即休眠20秒,每20秒執行一次。

       關於grep和awk命令,我也學習了,後續也會寫篇筆記。值得注意的是,最後那個呼叫sendmail服務傳送郵件,我這裡並沒有成功,好像是機器hostname的原因,後來我採取了只打印日誌,使用logstash來分析捕捉錯誤日誌,並使用輸出外掛裡的email來發送郵件(不幸的是,這裡的email也不行,使用qq和163的都連線不上,最後無奈只用第三方郵件服務,通過curl命令來請求呼叫,關於logstash分析監控日誌我後續也寫篇筆記記錄下)。

相關推薦

LinuxMySQL主從同步監控指令碼實現

    之前公司的B2B平臺的MySQL我給配了主從同步,所謂主從同步,也叫主從複製,等等,就是將主伺服器上的資料庫和一臺備用伺服器上的資料庫做同步,主伺服器的資料更新通過MySQL的binlog同步到從伺服器,通過主從同步還可以做資料庫的讀寫分離,由於公司B2B平臺業務非常

MySQL主從同步是怎樣實現的?

基本原理從庫生成兩個線程,一個I/O線程,一個SQL線程; i/o線程去請求主庫 的binlog,並將得到的binlog日誌寫到relay log(中繼日誌) 文件中; 主庫會生成一個 log dump 線程,用來給從庫 i/o線程傳binlog; SQL 線程,會讀取relay log文件中的日誌,

mysql主從同步監控腳本

mysql主從復制監控腳本 linux mysql shell mysql主從同步監控腳本,利用mysql從庫中的IO和SQL進程以及延遲時間來監控主從同步是否正常,詳細shell腳本如下:#!/bin/bash #author wangning #date 2017-7-17 #qq 119

MySql主從同步配置及實現

數據庫集群 授權 問題 show 不可 leg class status replicat mysql主從復制 隨著技術的發展,在實際的生產環境中,由單臺MySQL數據庫服務器不能滿足實際的需求。此時數據庫集群就很好的解決了這個問題了。采用MySQL分布式集群,能夠搭建一

linux mysql主從報錯處理常見方式

1:mysql從庫上,重置slave,重新指定master資訊    RESET SLAVE;    change master to master_host='主庫ip',master_user='zzh',master_password='Zzh91121

linux mysql主從配置

準備工作:主從上都先關閉iptables和firewalld以及selinux 注意事項:所有主從的id號不能重複!! 1:mysql主,啟動日誌,和設定id號    在[mysqld]下新增        log-bin=mysql-

MySQL 主從延遲監控指令碼(pt-heartbeat)

    對於MySQL資料庫主從複製延遲的監控,我們可以藉助percona的有力武器pt-heartbeat來實現。pt-heartbeat通過使用時間戳方式在主庫上更新特定表,然後在從庫上讀取被更新的時間戳然後與本地系統時間對比來得出其延遲。本文主要是通過指令碼來定期檢查從

監控mysql主從同步狀態是否異常,如果異常,則發生短信或郵寄給管理員

監控mysql主從同步狀態是否異常階段1:開發一個守護進程腳本每30秒實現檢測一次。階段2:如果同步出現如下錯誤號(1158,1159,1008,1007,1062),請跳過錯誤階段3:請使用數組技術實現上述腳本(獲取主從判斷及錯誤號部分)[[email protected]/* */ ~]# m

Linux的企業-Mysql主從同步,Gtid,半同步

mysql 半同步 gtid 一.Mysql主從同步MySQL 支持單向、異步復制,復制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時,它通知

監控mysql主從同步狀態

inf http use 監控mysql 編寫 運行時 xxxxx 操作 ast 在高並發網站架構中,MySQL數據庫主從同步是不可或缺的,不過經常會發生由於網絡原因或者操作錯誤,MySQL主從經常會出現不同步的情況,那麽如何監控MySQL主從同步,也變成網站正常運行的重要

[實操筆記]MySQL主從同步功能實現

就會 class tails 修改 高可用性 innodb leg 讀寫 mil 寫在前邊: 這兩天來了個需求,配置部署兩臺服務器的MySQL數據同步,折騰了兩天查了很多相關資料,一直連不上,後來發現其實是數據庫授權的ip有問題,我們用的服務器是機房中的虛擬機加上反向代理出

【純幹貨】Amoeba實現MySQL主從同步與讀寫分離

exec strong arc all abstract a star status utf prop 【純幹貨】Amoeba實現MySQL主從同步與讀寫分離 一、簡介 amoeba簡介 Amoeba(變形蟲)項目,該開源框架於2008年開始發布一款 Amoeba f

監控docker容器內mysql主從同步狀態

使用 bin con -i ner 獲取 face ont stdin Docker exec 命令docker exec :在運行的容器中執行命令語法docker exec [OPTIONS] CONTAINER COMMAND [ARG...]OPTIONS說明:-d

zabbix監控mysql主從同步

2個 多少 mon 令行 stat ffffff name http dad 1,部署了個mysql從數據庫,需要時時監控這個從數據庫的主從狀態。原理的話,是通過從mysql上的zabbix執行show slave status獲取Slave_IO_Running|Slav

監控mysql主從同步

quest mat 線程 condition passwd eth0 時間 bre slaves 1,昨天看到shell一道面試題,需求如下: 監控MySQL主從同步是否異常,如果異常,則發送短信或者郵件給管理員。提示:如果沒主從同步環境,可以用下面文本放到文件裏讀取來

Linux下配置MySQL主從同步(不復雜,簡單明瞭)

明人不說暗話,直接進入正題 一、準備工作 假設兩個伺服器IP如下: 主伺服器:44.92.163.112    -Linux 從伺服器:114.74.22.11     -Linux 注意: 1、主從資料庫版本最好一致; 2、主從資料庫內資料保持一致;

linux mysql的主主從以及主主從從結構,注意事項

~~~~~~~~~~~~~~~主主從結構注意事項~~~~~~~~~~~~~~~~~~ 1:級聯複製 主1------主2----從 主2上需要開啟級聯複製:(要不然主2的從,不會同步資料) vim /etc/my.cf [mysqld] log-slave-updates = true

linuxmysql的gtid主從複製故障切換

故障切換步驟 主有故障時:(切換步驟,需要把其中的一個從設定為主,另一個設定為其的從庫) 1:檢查從庫上,完成事務的從,誰最接近主庫 server2:   show salve status\G;           Master

linuxmysql的gtid主從複製報錯處理

一、從庫上報錯檢視:     show slave status\G             Retrieved_Gtid_Set: e10c75be-5c1b-11e6-ab7c-000

linux自動備份oracle資料庫並傳到備份伺服器 指令碼實現

實際專案中,備份資料是不可缺少的一步,完成資料的自動備份減少個人的工作量,是我們的目標。之前很少寫過指令碼,不過這些簡單的操作還是可以做到的!話不多說,開始具體介紹: oracle版本:10.2.0 作業系統:linuxredhat6.3 具體操作: (1)在伺服器上建立備