Mysql 主從延時監控(pt-heartbeat)詳解

roc_guo發表於2021-07-16
原理

pt工具在主庫上面建立一張測試表,以一秒的頻率去更新這個的記錄並把當前時間寫入到欄位中,透過分析主從同步過來的時間和當前時間做對比得出時間差。

方法
1.在主庫上建立後臺update程式
pt-heartbeat -uroot -proot  -D chenmh --create-table --update  --daemonize

-u:連線主庫的使用者

-p:連線主庫的使用者密碼

-D:主庫上存在的資料庫,這個資料庫隨便指定,但是必須存在

--create-table:預設會在主庫指定的資料庫中建立一個“heartbeat”表

2.監控從庫
pt-heartbeat -uroot -proot -D chenmh --table=heartbeat --master-server-id=10  --monitor -h 192.168.137.20 --interval=1

這裡面的引數除了--master-server-id是主庫的serverid,其它的都是指從庫,特別注意--master-server-id一定不能寫錯否則結果就是錯誤的,記錄了日誌之後就可以對該值做監控預警了

3.寫入監控日誌做預警分析
pt-heartbeat -uroot -proot -D chenmh --table=heartbeat --master-server-id=10  --monitor -h 192.168.137.20 --interval=1  --file=/tmp/heart.log
cat /tmp/heart.log |awk -F "s"  '{print $1}'
4.停止後臺更新操作
pt-heartbeat --stop

當你停止了後臺更新程式會在/tmp目錄下面產生一個pt-heartbeat-sentinel檔案,下次再啟動該後臺程式之前必須先刪除該檔案,否則無法啟動。

rm -rf /tmp/pt-heartbeat-sentinel
引數
Usage: pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop
其中--update, --moniter,--check,--stop都是單獨使用的,並且--update, --monitor, and --check are mutually exclusive
--daemonize and --check are mutually exclusive.他們之間還是存在互斥。
Options:
  --ask-pass                  使用密碼進行mysql連線時給予提示
  --charset=s             -A  預設的字元選項
  --check                     執行一次從庫的監控就結束
  --check-read-only           如果是隻讀的伺服器那麼使用該選項會保持插入
  --config=A                  使用逗號分隔,如果指定了,那麼該引數作為命令列的第一個選項
  --create-table              如果表不存在建立表heartbeat
  --daemonize                 建立後臺的更新shell
  --database=s            -D  指定連線的資料庫
  --dbi-driver=s              Specify a driver for the connection; mysql and Pg
                              are supported (default mysql)
  --defaults-file=s       -F  透過提供的檔案進行mysql連線
  --file=s                    輸出最新的  --monitor監控資訊到指定的檔案
  --frames=s                  設定時間週期(default 1m,5m,15m)
  --help                      顯示幫助資訊
  --host=s                -h  指定連線的host
  --[no]insert-heartbeat-row  在使用--tables的時候預設是插入一條記錄到表heartbeat前提是表中不存在該記錄行 
  --interval=f                指定更新和監控heartbeat表的頻率預設是1S
  --log=s                     當使用daemonized進行後臺更新操作時輸出所有的資訊到指定的該檔案
  --master-server-id=s        指定主的server-id
  --monitor                   監控從伺服器的引數選項
  --password=s            -p  指定密碼
  --pid=s                     建立pid檔案
  --port=i                -P  指定連線時使用的埠
  --print-master-server-id    列印輸出master-server-id
  --recurse=i                 Check slaves recursively to this depth in --check
                              mode
  --recursion-method=a        Preferred recursion method used to find slaves (
                              default processlist,hosts)
  --replace                   使用replace替換--UPDATE操作
  --run-time=m                指定監控的時長,單位有: s=seconds, m=minutes, h=hours, d=days; 如果比指定預設是以秒為單位一直監控下去
  --sentinel=s                Exit if this file exists (default /tmp/pt-
                              heartbeat-sentinel)
  --set-vars=A                Set the MySQL variables in this comma-separated
                              list of variable=value pairs
  --skew=f                    指定執行從庫檢查的延時時長預設是0.5
  --socket=s              -S  指定連線時使用的socket檔案
  --stop                      停止後臺更新程式並生成--sentinel指定的檔案                              
  --table=s                   指定更新的表(預設是heartbeat)
  --update                    更新主的heartbeat表,這個引數是後臺程式必須的引數也可以用--replace替代
  --user=s                -u  指定使用者名稱
  --utc                       忽略系統時間僅使用UTC
  --version                   顯示版本資訊
  --[no]version-check         Check for the latest version of Percona Toolkit,
                              MySQL, and other programs (default yes)
總結

可以透過這個監控的輸出檔案資訊做一個郵件報警,可以去寫這樣的一個shell


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2781588/,如需轉載,請註明出處,否則將追究法律責任。

相關文章