探索MySQL高可用架構之MHA(9)

探索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的朋友、送給想學又不敢實踐操作的朋友、送給怕實現出現錯誤的朋友!!!

    想和做是兩個過程,有的時候其實你和成功只差那麼一步,只要你別放棄堅持下去,你的辛苦是不會白付出的,因爲你永遠不會知道未來的你是多麼的強大!!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章