亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

pt-heartbeat的工作原理通過使用時(shí)間戳方式在主庫上更新特定表,然后在從庫上讀取被更新特定表里的時(shí)間戳,再與本地系統(tǒng)時(shí)間對(duì)比來得出其延遲。

具體流程:

1)在主庫上創(chuàng)建一張heartbeat表,按照一定的時(shí)間頻率更新該表的字段(把時(shí)間更新); 監(jiān)控操作運(yùn)行后,heartbeat表能促使主從同步。

2)連接到從庫上檢查復(fù)制的時(shí)間記錄,和從庫的當(dāng)前系統(tǒng)時(shí)間進(jìn)行比較,得出時(shí)間的差異。

 

一、使用方法(主從和從庫上都可以執(zhí)行監(jiān)控操作):

pt-heartbeat [OPTIONS] [DSN] —update | —monitor | —check | —stop

注意:需要指定的參數(shù)至少有 --stop 、--update、--monitor、--check
其中--update,--monitor和--check是互斥的;--daemonize和--check也是互斥。
--ask-pass 隱式輸入MySQL密碼
--charset 字符集設(shè)置
--check 檢查從的延遲,檢查一次就退出,除非指定了--recurse會(huì)遞歸的檢查所有的從服務(wù)器。
--check-read-only 如果從服務(wù)器開啟了只讀模式,該工具會(huì)跳過任何插入。
--create-table 在主上創(chuàng)建心跳監(jiān)控的表,如果該表不存在,可以自己手動(dòng)建立,建議存儲(chǔ)引擎改成memory;通過更新該表知道主從延遲的差距。
CREATE TABLE heartbeat (
ts                    varchar(26) NOT NULL,
server_id             int unsigned NOT NULL PRIMARY KEY,
file                  varchar(255) DEFAULT NULL,
position              bigint unsigned DEFAULT NULL,
relay_master_log_file varchar(255) DEFAULT NULL,
exec_master_log_pos   bigint unsigned DEFAULT NULL
);
heratbeat 一直在更改ts和position,而ts是檢查復(fù)制延遲的關(guān)鍵
--daemonize 執(zhí)行時(shí),放入到后臺(tái)執(zhí)行
--user=-u, 連接數(shù)據(jù)庫的帳號(hào)
--database=-D, 連接數(shù)據(jù)庫的名稱
--host=-h, 連接的數(shù)據(jù)庫地址
--password=-p, 連接數(shù)據(jù)庫的密碼
--port=-P, 連接數(shù)據(jù)庫的端口
--socket=-S, 連接數(shù)據(jù)庫的套接字文件
--file [--file=output.txt] 打印--monitor最新的記錄到指定的文件,很好的防止?jié)M屏幕全是數(shù)據(jù)。
--frames [--frames=1m,5m,15m] 在--monitor里輸出的[]里的記錄段,默認(rèn)是1m,5m,15m。可以指定1個(gè);如:--frames=1s,多個(gè)用逗號(hào)隔開。可用單位有秒(s)、分鐘(m)、小時(shí)(h)、天(d)。
--interval 檢查、更新的間隔時(shí)間。默認(rèn)是見是1s。最小的單位是0.01s,最大精度為小數(shù)點(diǎn)后兩位,因此0.016將自動(dòng)調(diào)整至0.02。
--log 開啟daemonized模式的所有日志將會(huì)被打印到制定的文件中。
--monitor 持續(xù)監(jiān)控從庫的延遲情況。通過--interval指定的間隔時(shí)間,打印出從庫的延遲信息,通過--file則可以把這些信息打印到指定的文件。
--master-server-id 指定主庫的server_id,若沒有指定則該工具會(huì)連到主庫上查找其server_id。
--print-master-server-id 在--monitor和--check模式下,指定該參數(shù)則打印出主的server_id。
--recurse 多級(jí)復(fù)制的檢查深度。模式M-S-S...不是最后的一個(gè)從庫都需要開啟log_slave_updates,這樣才能檢查到。
--recursion-method 指定復(fù)制檢查的方式,默認(rèn)為processlist,hosts。
--update 更新主庫上的心跳表。
--replace 使用--replace代替--update模式更新心跳表里的時(shí)間字段,這樣的好處是不用管表里是否有行。
--stop 停止運(yùn)行該工具(--daemonize),在/tmp/目錄下創(chuàng)建一個(gè)"pt-heartbeat-sentinel"文件。后面想重新開啟則需要把該臨時(shí)文件刪除,才能開啟(--daemonize)。
--table 指定心跳表名,默認(rèn)heartbeat。

 

二、演示使用pt-heartbeat

# --master-server-id參數(shù)(主庫my.cnf里配置的server-id值)
a、首先添加表
# pt-heartbeat --user=root --password=pwd -S /tmp/mysql.sock -D test --master-server-id=1 --create-table --update
MASTER> select * from heartbeat;
+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+
| ts | server_id | file             | position  | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+
| 2022-09-22T09:48:14.003020 | 1 | mysql-bin.000391  | 677136957 | mysql-bin.000180      |                 120 |
+----------------------------+-----------+------------------+-----------+-----------------------+---------------------+
b、更新主庫上的heartbeat(后臺(tái)運(yùn)行)
# pt-heartbeat --user=root --password=pwd -S /tmp/mysql.sock -D test --master-server-id=1 --update &
[1] 31249
c、從庫上監(jiān)控延遲
# pt-heartbeat --user=root --password=pwd -S /tmp/mysql.sock -D test --master-server-id=1 --monitor --print-master-server-id
1.00s [ 0.02s,  0.00s,  0.00s ] 1  #實(shí)時(shí)延遲: 1分鐘延遲,5分鐘延遲,15分鐘延遲
1.00s [ 0.03s,  0.01s,  0.00s ] 1  
1.00s [ 0.05s,  0.01s,  0.00s ] 1
1.00s [ 0.07s,  0.01s,  0.00s ] 1
1.00s [ 0.08s,  0.02s,  0.01s ] 1
1.00s [ 0.10s,  0.02s,  0.01s ] 1
1.00s [ 0.12s,  0.02s,  0.01s ] 1
1.00s [ 0.13s,  0.03s,  0.01s ] 1
d、其他操作示例
#將主庫上的update使用守護(hù)進(jìn)程方式調(diào)度
# pt-heartbeat --user=root --password=pwd -S /tmp/mysql.sock -D test --master-server-id=1 --update --daemonize
#修改主庫上的更新間隔為2s
# pt-heartbeat --user=root --password=pwd -S /tmp/mysql.sock -D test --master-server-id=1 --update --daemonize --interval=2
#停止主庫上的pt-heartbeat守護(hù)進(jìn)程
# pt-heartbeat --stop
Successfully created file /tmp/pt-heartbeat-sentinel
# rm -rf /tmp/pt-heartbeat-sentinel
#單次查看從庫上的延遲情況
# pt-heartbeat --user=root --password=pwd -S /tmp/mysql.sock -D test --master-server-id=1 --check
1.00
#使用守護(hù)進(jìn)程監(jiān)控從庫并輸出日志
# pt-heartbeat --user=root --password=pwd -S /tmp/mysql.sock -D test --master-server-id=1 --monitor --print-master-server-id --daemonize --log=/tmp/slave-heart.log

 

三、自動(dòng)化監(jiān)控

注意:
如果想把這個(gè)輸出結(jié)果加入自動(dòng)化監(jiān)控,那么可以使用如下命令使監(jiān)控輸出寫到文件,然后使用腳本定期過濾文件中的最大值作為預(yù)警即可:
注意--log選項(xiàng)必須在有--daemonize參數(shù)的時(shí)候才會(huì)打印到文件中,且這個(gè)文件的路徑最好在/tmp下,否則可能因?yàn)闄?quán)限問題無法創(chuàng)建
# pt-heartbeat -D test --table=heartbeat --monitor --user=root --password=pwd --log=/opt/master-slave-delay.log --daemonize
[root@master-server ~]# tail -f /opt/master-slave-delay.txt //可以測試,在主庫上更新數(shù)據(jù)時(shí),從庫上是否及時(shí)同步,如不同步,可以在這里看到監(jiān)控的延遲數(shù)據(jù)
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
0.00s [ 0.00s, 0.00s, 0.00s ]
.......
下面是編寫的主從同步延遲監(jiān)控腳本,就是定期過濾--log文件中最大值(此腳本運(yùn)行的前提是:啟動(dòng)更新主庫heartbeat命令以及帶上--log的同步延遲檢測命令)。如果發(fā)生延遲,發(fā)送報(bào)警。
# cat /root/check-slave-monitor.sh
#!/bin/bash
cat /opt/master-slave-delay.log > /opt/master_slave_delay.log
echo -e > /opt/master-slave-delat.log
max_time=`cat /opt/master_slave_delay.log |grep -v '^$' |awk '{print $1}' |sort -k1nr |head -1`
NUM=$(echo "$max_time"|cut -d"s" -f1)
if [ $NUM == "0.00" ];then
echo "MySQL主從同步延遲一致"
else
echo "Mysql主從數(shù)據(jù)同步有延遲"
# TODO 這里添加報(bào)警
fi
結(jié)合crontab,每隔一分鐘檢查一次
# mysql主從同步延遲檢查
* * * * * /bin/bash -x /root/check-slave-monitor.sh > /dev/null 2>&1

 

關(guān)閉上面在主庫上執(zhí)行heartbeat的守護(hù)進(jìn)程

方法一:可以用參數(shù)--stop去關(guān)閉
# pt-heartbeat --stop
Successfully created file /tmp/pt-heartbeat-sentinel
這樣就把在主上開啟的進(jìn)程殺掉了。
但是后續(xù)要繼續(xù)開啟后臺(tái)進(jìn)行的話,記住一定要先把/tmp/pt-heartbeat-sentinel 文件刪除,否則啟動(dòng)不了
方法二:直接kill掉進(jìn)程pid(推薦這種方法)
#ps -ef|grep heartbeat
kill -9 15152

 

最后總結(jié):

通過pt-heartbeart工具可以很好地彌補(bǔ)默認(rèn)主從延遲的問題,但需要搞清楚該工具的原理。

重點(diǎn)了:默認(rèn)的Seconds_Behind_Master值是通過將服務(wù)器當(dāng)前的時(shí)間戳與二進(jìn)制日志中的事件時(shí)間戳相對(duì)比得到的,所以只有在執(zhí)行事件時(shí)才能報(bào)告延遲。從庫復(fù)制線程沒有運(yùn)行,也會(huì)報(bào)延遲。

還有一種情況:大事務(wù),一個(gè)事務(wù)更新數(shù)據(jù)長達(dá)一個(gè)小時(shí),最后提交。這條更新將比它實(shí)際發(fā)生時(shí)間要晚一個(gè)小時(shí)才記錄到二進(jìn)制日志中。當(dāng)從庫執(zhí)行這條語句時(shí),會(huì)臨時(shí)地報(bào)告?zhèn)鋷煅舆t為一個(gè)小時(shí),執(zhí)行完后又很快變成0。

以上就是今天的內(nèi)容,希望讀者朋友看完這篇文章后有所啟發(fā)。

分享到:
標(biāo)簽:MySQL
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定