MHA 清理relay log(purge_relay_logs),relaylogpurge
MySQL資料庫主從複製在預設情況下從庫的relay logs會在SQL線程執行完畢後被自動刪除,但是對於MHA情境下,對於某些滯後從庫的恢複依賴於其他從庫的relay log,因此採取禁用自動刪除功能以及定期清理的辦法。對於清理過多過大的relay log需要注意引起的複寫延遲資源開銷等。MHA可通過purge_relay_logs指令碼及配合cronjob來完成此項任務,具體描述如下。
1、purge_relay_logs的功能
a、為relay日誌建立永久連結(最小化大量刪除大檔案導致的效能問題)
b、SET GLOBAL relay_log_purge=1; FLUSH LOGS; SET GLOBAL relay_log_purge=0;
c、刪除relay log(rm –f /path/to/archive_dir/*)
2、purge_relay_logs的用法及相關參數
###用法
# purge_relay_logs --help
Usage:
purge_relay_logs --user=root --password=rootpass --host=127.0.0.1
###參數描述
--user mysql 使用者名稱,預設為root
--password mysql 密碼
--port 連接埠號碼
--host 主機名稱,預設為127.0.0.1
--workdir 指定建立relay log的永久連結的位置,預設是/var/tmp,成功執行指令碼後,永久連結的中繼記錄檔被刪除
由於系統不同分區建立永久連結檔案會失敗,故需要執行永久連結具體位置,建議指定為relay log相同的分區
--disable_relay_log_purge 預設情況下,參數relay_log_purge=1,指令碼不做任何處理,自動結束
設定該參數,指令碼會將relay_log_purge設定為0,當清理relay log之後,最後將參數設定為OFF(0)
3、定製清理relay log cronjob
pureg_relay_logs指令碼在不阻塞SQL線程的情況下自動清理relay log。對於不斷產生的relay log直接將該指令碼部署到crontab以實現按天或按小時定期清理。
$ crontab -l
# purge relay logs at 5am
0 5 * * * app /usr/bin/purge_relay_logs --user=root --password=PASSWORD --disable_relay_log_purge >> /var/log/masterha/purge_relay_logs.log 2>&1
4、手動清理樣本
# purge_relay_logs --user=mha --password=mha --disable_relay_log_purge
2015-04-23 14:33:20: purge_relay_logs script started.
relay_log_purge is enabled. Disabling..
Found relay_log.info: /data/mysqldata/relay-log.info
Opening /data/mysqldata/vdbsrv3-relay-bin.000001 ..
Opening /data/mysqldata/vdbsrv3-relay-bin.000002 ..
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.
2015-04-23 14:33:23: All relay log purging operations succeeded.