情景
MySQL數據庫主從復制在默認情況下從庫的relay logs會在SQL線程執行完畢后被自動刪除。但是:在relay_log_purge = 0和MHA集群下,不會被自動刪除,需要手動刪除。如何安全的刪除relay logs就比較關鍵了!
主要有兩種方式:
方式一:
通過MHA中自帶的工具 purge_relay_logs 工具來刪除。
步驟:
- 創建工作目錄
目的為了提高性能,這個工作目錄必須跟mysql在同一個磁盤分區
mkdir -p /data/mha_tmp
- 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:自動設置 "relay_log_purge = 1"
方式二:
手動刪除 relay log
- 設置relay_log_purge = 1
SET GLOBAL relay_log_purge = 1
- flush logs
通過管理員用戶登陸從數據庫,然后執行下面命令:
flush logs;
可以執行多次!
注意:
觀察堆積的relay logs日志是否已經刪除,如果刪除,直接執行下面第6步“恢復relay_log_purge = 0“;如果未刪除,繼續從下面第3步”停止slave“往下操作!!!
- 停止slave
通過管理員用戶登陸從數據庫,然后執行下面命令:
stop slave;
- 刪除relay logs
可以通過rm直接刪除relay logs
通使用下面方式安全刪除:
(1) 統計所有關於relay的文件(包括 relay_log_name.index)總個數
ls -A1 |grep relay | sort -rn | wc -l
(2) 列出要刪除所有有關relay的文件:
ls -A1 |grep relay | sort -rn | tail -n 100
說明: 100 為要刪除的relay logs 數量
(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
通過管理員用戶登陸從數據庫,然后執行下面命令:
start slave;
6 . 恢復relay_log_purge = 0
通過管理員用戶登陸從數據庫,然后執行下面命令:
SET GLOBAL relay_log_purge=0;
擴展
如果你對從數據庫要求不高,可以將relay_log_purge = 1