溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

【MySQL】【高可用】purge_relay_logs工具的使用

發(fā)布時(shí)間:2020-07-25 21:34:05 來(lái)源:網(wǎng)絡(luò) 閱讀:5592 作者:對(duì)唔住 欄目:MySQL數(shù)據(jù)庫(kù)

MySQL】【高可用】purge_relay_logs工具的使用

背景:

? 在MHA高可用架構(gòu)中切換的步驟中,主要靠對(duì)各個(gè)實(shí)例的relay log文件新舊程度進(jìn)行比較,選取最新的relay log進(jìn)行群組內(nèi)的數(shù)據(jù)追加,以此盡可能地來(lái)保證數(shù)據(jù)的安全性,減少數(shù)據(jù)丟失的數(shù)量。這就要求relay log不能被系統(tǒng)自動(dòng)清除,要保留一段時(shí)間,防止主庫(kù)掛掉,進(jìn)行數(shù)據(jù)補(bǔ)全。

? 但這就會(huì)產(chǎn)生一個(gè)問(wèn)題,在業(yè)務(wù)持續(xù)繁忙時(shí),從庫(kù)可能會(huì)積累很多relay log,若不及時(shí)清除早晚會(huì)釀出禍患。

簡(jiǎn)介:

工具: purge_relay_logs
作用: 清除relay log,盡可能多的清除relay log
安裝: 包含在mha的node模塊之中,不需單獨(dú)安裝

參數(shù):

? --user/password/host/port 指定用戶名/密碼/主機(jī)/端口,這里有個(gè)需要注意的地方,雖然提供了主機(jī)的參數(shù),但是只允許127.0.0.1或者localhost兩種取值,即只能從本地登錄。

? --workdir 指定硬鏈接創(chuàng)建的位置,purge_relay_logs使用硬鏈接的方式刪除relay log,需要注意的是,為了保證硬鏈接的成功,建議硬鏈接的文件夾和relay log的目錄在同一個(gè)分區(qū)。[5.7版本似乎沒(méi)有用到]

? --disable_relay_log_purge 禁用MySQL的自動(dòng)清除relay log設(shè)置,默認(rèn)情況下,MySQL自動(dòng)清除relay log,反映到參數(shù)上即是:relay_log_purge=1。若MySQL自動(dòng)清除relay log,工具在啟動(dòng)后就會(huì)自動(dòng)結(jié)束,不清除任何文件。當(dāng)指定了此參數(shù)后,工具會(huì)禁用MySQL的自動(dòng)清除relay log設(shè)置。

使用:

? 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.先檢查是否開(kāi)啟了自動(dòng)清理relay log

? 2.從MySQL中獲得relay log 的文件名,位置,正在使用的編號(hào),創(chuàng)建硬鏈接。

? 3.開(kāi)啟自動(dòng)清理,刷新relay log,生成新的一組relay log后,關(guān)閉自動(dòng)清理,這一步在最大程度上清理了relay log。

自動(dòng)化清理:

? 通過(guò)shell腳本并添加到crontab中定時(shí)清理。

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

附:

參考文章:國(guó)平師兄:https://blog.51cto.com/arthur376/1812640

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI