1. 程式人生 > >Mysql 刪除從資料庫的relay logs最佳方式、最安全方式

Mysql 刪除從資料庫的relay logs最佳方式、最安全方式

刪除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
  2. 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
  3. 加入到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

2. flush logs

通過管理員使用者登陸從資料庫,然後執行下面命令:

flush logs;

可以執行多次!

注意:

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

3. 停止slave

通過管理員使用者登陸從資料庫,然後執行下面命令:

stop slave;

4. 刪除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 {}

注意:

  1. 要保留最新的兩個relay log
  2. 要保留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