探索MySQL高可用架構之MHA(9)
-----構建mysql高可用系列(共9篇)
上一篇文章介紹了本次架構的mha不足的修復!
本篇文章主要介紹relay log的清除!
MHA在發生切換的過程中,從庫的恢復過程中依賴於relay log的相關信息,所以這裏要將relay log的自動清除設置爲OFF,採用手動清除relay log的方式。在默認情況下,從服務器上的中繼日誌會在SQL線程執行完畢後被自動刪除。但是在MHA環境中,這些中繼日誌在恢復其他從服務器時可能會被 用到,因此需要禁用中繼日誌的自動刪除功能。定期清除中繼日誌需要考慮到複製延時的問題。在ext3的文件系統下,刪除大的文件需要一定的時間,會導致嚴 重的複製延時。爲了避免複製延時,需要暫時爲中繼日誌創建硬鏈接,因爲在linux系統中通過硬鏈接刪除大文件速度會很快。(在mysql數據庫中,刪除大表時,通常也採用建立硬鏈接的方式)
MHA節點中包含了pure_relay_logs命令工具,它可以爲中繼日誌創建硬鏈接,執行
SET GLOBAL relay_log_purge=1,等待幾秒鐘以便SQL線程切換到新的中繼日誌,再執行
SET GLOBAL relay_log_purge=0。
pure_relay_logs腳本參數如下所示:
--user mysql 用戶名
--password mysql 密碼
--port 端口號
--workdir 指定創建relay log的硬鏈接的位置,默認是/var/tmp,
由於系統不同分區創建硬鏈接文件會失敗,
故需要執行硬鏈接具體位置,成功執行腳本後,
硬鏈接的中繼日誌文件被刪除
--disable_relay_log_purge 默認情況下,如果relay_log_purge=1,
腳本會什麼都不清理,自動退出,通過設定這個參數,
當relay_log_purge=1的情況下會將relay_log_purge設置0。 清理relay log之後,最後將參數設置爲OFF。
下面我們開始操作一下
(1) 設置relay log的清除方式(在每個slave節點上)
mysql -u root -pmysql -e 'set global relay_log_purge=0'
(2) 設置定期清理relay腳本(在每個slave節點上)
vi purge_relay_log.sh #!/bin/bash user=root #聲明登錄mysql的用戶 passwd=mysql #聲明登錄mysql的用戶的密碼 port=3306 #聲明mysql的端口 log_dir='/app/masterha/app1/log' #log目錄 work_dir='/app/masterha/app1' #work目錄 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 --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1
(3)添加到crontab定期執行
crontab -l0 4 * * * /bin/bash /root/purge_relay_log.sh
purge_relay_logs腳本刪除中繼日誌不會阻塞SQL線程。下面我們手動執行看看什麼情況。
purge_relay_logs --user=root --password=mysql --port=3306 -disable_relay_log_purge --workdir=/app/masterha/app1
2015-04-20 15:47:24: purge_relay_logs script started.
Found relay_log.info: /data/mysql/relay-log.info
Removing hard linked relay log files server03-relay-bin* under /data/.. done.
Current relay log file: /data/mysql/server03-relay-bin.000002
Archiving unused relay log files (up to /data/mysql/server03-relay-bin.000001) ...
Creating hard link for /data/mysql/server03-relay-bin.000001 under /data//server03-relay-bin.000001 .. ok.
Creating hard links for unused relay log files completed.
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.
Removing hard linked relay log files server03-relay-bin* under /data/.. done.2014-04-20 15:47:27: All relay log purging operations succeeded.
weblogic集羣的應用發佈工作就成功結束了!
結束語:
到此爲此,構建mysql高可用系列共9篇文章,就全部結束了。
送給想學習mysql的朋友、送給想學又不敢實踐操作的朋友、送給怕實現出現錯誤的朋友!!!
想和做是兩個過程,有的時候其實你和成功只差那麼一步,只要你別放棄堅持下去,你的辛苦是不會白付出的,因爲你永遠不會知道未來的你是多麼的強大!!!