Mysql 刪除從數據庫的relay logs最佳方式、最安全方式


情景
MySQL數據庫主從復制在默認情況下從庫的relay logs會在SQL線程執行完畢后被自動刪除。但是:在relay_log_purge = 0和MHA集群下,不會被自動刪除,需要手動刪除。如何安全的刪除relay logs就比較關鍵了!

主要有兩種方式:

方式一:
通過MHA中自帶的工具 purge_relay_logs 工具來刪除。

步驟:

  1. 創建工作目錄

目的為了提高性能,這個工作目錄必須跟mysql在同一個磁盤分區

mkdir -p /data/mha_tmp
  1. 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  
  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

  1. 設置relay_log_purge = 1
SET GLOBAL relay_log_purge = 1
  1. flush logs
    通過管理員用戶登陸從數據庫,然后執行下面命令:
flush logs;

可以執行多次!
注意
觀察堆積的relay logs日志是否已經刪除,如果刪除,直接執行下面第6步“恢復relay_log_purge = 0“;如果未刪除,繼續從下面第3步”停止slave“往下操作!!!

  1. 停止slave
    通過管理員用戶登陸從數據庫,然后執行下面命令:
stop slave;
  1. 刪除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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM