您好,登錄后才能下訂單哦!
? 在MHA高可用架構中切換的步驟中,主要靠對各個實例的relay log文件新舊程度進行比較,選取最新的relay log進行群組內的數據追加,以此盡可能地來保證數據的安全性,減少數據丟失的數量。這就要求relay log不能被系統自動清除,要保留一段時間,防止主庫掛掉,進行數據補全。
? 但這就會產生一個問題,在業務持續繁忙時,從庫可能會積累很多relay log,若不及時清除早晚會釀出禍患。
工具: | purge_relay_logs |
---|---|
作用: | 清除relay log,盡可能多的清除relay log |
安裝: | 包含在mha的node模塊之中,不需單獨安裝 |
? --user/password/host/port 指定用戶名/密碼/主機/端口,這里有個需要注意的地方,雖然提供了主機的參數,但是只允許127.0.0.1或者localhost兩種取值,即只能從本地登錄。
? --workdir 指定硬鏈接創建的位置,purge_relay_logs使用硬鏈接的方式刪除relay log,需要注意的是,為了保證硬鏈接的成功,建議硬鏈接的文件夾和relay log的目錄在同一個分區。[5.7版本似乎沒有用到]
? --disable_relay_log_purge 禁用MySQL的自動清除relay log設置,默認情況下,MySQL自動清除relay log,反映到參數上即是:relay_log_purge=1。若MySQL自動清除relay log,工具在啟動后就會自動結束,不清除任何文件。當指定了此參數后,工具會禁用MySQL的自動清除relay log設置。
? purge_relay_logs --user=sniffer --password=123456 --port=3110 --host=127.0.0.1 --disable_relay_log_purge --workdir=/data/mha/
? 輸出如下:
2018-02-02 16:40:01: purge_relay_logs script started.
Opening /data/mysql/3110/data/relay-bin.000012 ..
Opening /data/mysql/3110/data/relay-bin.000013 ..
Executing SET GLOBAL relay_log_purge=1; FLUSH LOGS; sleeping a few seconds so that SQL thread can delete older relay log files (if it keeps up); SET GLOBAL relay_log_purge=0; .. ok.
2018-02-02 16:40:04: All relay log purging operations succeeded.
#MySQL中
$./vc-mysql-sniffer --binding "[::]:3110"|grep -v "#"
USE ``;
SHOW SLAVE STATUS;
SELECT @@global.relay_log_purge As Value;
SELECT VERSION() AS Value;
SELECT @@global.relay_log_info_repository AS Value;
SELECT Relay_log_name FROM mysql.slave_relay_log_info;
SELECT @@global.datadir AS Value;
SELECT GET_LOCK('MHA_Master_High_Availability_Failover', '200') AS Value;
SELECT VERSION() AS Value;
SET GLOBAL relay_log_purge=1;
FLUSH NO_WRITE_TO_BINLOG /*!50501 RELAY */ LOGS;
SET GLOBAL relay_log_purge=0;
SELECT RELEASE_LOCK('MHA_Master_High_Availability_Failover') As Value;
? 解析:1.先檢查是否開啟了自動清理relay log
? 2.從MySQL中獲得relay log 的文件名,位置,正在使用的編號,創建硬鏈接。
? 3.開啟自動清理,刷新relay log,生成新的一組relay log后,關閉自動清理,這一步在最大程度上清理了relay log。
? 通過shell腳本并添加到crontab中定時清理。
cat >/etc/auto_clean_relay_log.sh<<EOF
#!/bin/sh
USER=proxysql
PASSWORD=123456
PORT=3110
log_dir='/data/mha'
work_dir='/data/mha'
purge='/usr/local/bin/purge_relay_logs'
if [ ! -d $log_dir ]
then
mkdir $log_dir -p
fi
$purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port >> $log_dir/purge_relay_logs.log 2>&1
? crontab -e
增加如下一行:
0 0 */3 * * sh /etc/auto_clean_relay_log.sh
參考文章:國平師兄:https://blog.51cto.com/arthur376/1812640
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。