情景
MySQL數(shù)據(jù)庫主從復制在默認情況下從庫的relay logs會在SQL線程執(zhí)行完畢后被自動刪除。但是:在relay_log_purge = 0和MHA集群下,不會被自動刪除,需要手動刪除。如何安全的刪除relay logs就比較關(guān)鍵了!
主要有兩種方式:
方式一:
通過MHA中自帶的工具 purge_relay_logs 工具來刪除。
步驟:
- 創(chuàng)建工作目錄
目的為了提高性能,這個工作目錄必須跟mysql在同一個磁盤分區(qū)
- purge relay logs
/usr/bin/purge_relay_logs --user=USERNAME --password=PASSWORD --host=Mysql_IP --disable_relay_log_purge --workdir=/data/mha_tmp 2>&1
- 加入到crontab中
0 4 * * * /usr/bin/purge_relay_logs --user=USERNAME --password=PASSWORD --host=Mysql_IP --disable_relay_log_purge --workdir=/data/mha_tmp 2>&1
說明:
–disable_relay_log_purge:自動設(shè)置 "relay_log_purge = 1"
方式二:
手動刪除 relay log
- 設(shè)置relay_log_purge = 1
SET GLOBAL relay_log_purge = 1
- flush logs
通過管理員用戶登陸從數(shù)據(jù)庫,然后執(zhí)行下面命令:
可以執(zhí)行多次!
注意:
觀察堆積的relay logs日志是否已經(jīng)刪除,如果刪除,直接執(zhí)行下面第6步“恢復relay_log_purge = 0“;如果未刪除,繼續(xù)從下面第3步”停止slave“往下操作?。?!
- 停止slave
通過管理員用戶登陸從數(shù)據(jù)庫,然后執(zhí)行下面命令:
- 刪除relay logs
可以通過rm直接刪除relay logs
通使用下面方式安全刪除:
(1) 統(tǒng)計所有關(guān)于relay的文件(包括 relay_log_name.index)總個數(shù)
ls -A1 |grep relay | sort -rn | wc -l
(2) 列出要刪除所有有關(guān)relay的文件:
ls -A1 |grep relay | sort -rn | tail -n 100
說明: 100 為要刪除的relay logs 數(shù)量
(3) 確定沒有問題,刪除relay logs:
ls -A1 |grep relay | sort -rn | tail -n 100 | xargs rm -rf {}
注意:
要保留最新的兩個relay log
要保留relay log的index文件
relay log的index一般命名為: relay_log_name.index
例如: relay-bin.index
5. 啟動slave
通過管理員用戶登陸從數(shù)據(jù)庫,然后執(zhí)行下面命令:
6 . 恢復relay_log_purge = 0
通過管理員用戶登陸從數(shù)據(jù)庫,然后執(zhí)行下面命令:
SET GLOBAL relay_log_purge=0;
擴展
如果你對從數(shù)據(jù)庫要求不高,可以將relay_log_purge = 1
|