1. 程式人生 > >關於purge master logs的一個小實驗

關於purge master logs的一個小實驗

關於purge master logs的一個小實驗

原理部分來自《MariaDB原理與實現》 Page109-111


purge刪除binlog的過程如下:

1、檢查to_log在mysql-bin.index中是否存在,避免非法的purge操作

2、創建一個purge_index_file,用於保存待刪除的binlog文件名稱

3、遍歷index文件,將可刪除的binlog添加到purge_index_file中(purge刪除時候,只會把未使用到的binlog之前的文件刪除掉)

4、將purge_index_file的內容寫入到磁盤

5、更新mysql-bin.index文件,將待刪除的binlog文件名從index文件中刪除掉

6、刪除所有待刪除的binlog文件

7、刪除purge_index_file文件



實驗在主庫上能否刪除從庫正在讀取的binlog:

1、在從庫上stop slave 暫停復制。

2、主庫上造幾個大的binlog,並多次flush logs切割下binlog。

3、在從庫上start slave 開啟復制。

4、在主庫上執行purge master logs 操作清理掉全部的binlog(如下圖):

技術分享

上圖中間部分,我們可以看到purge操作有一個warning。並且最終清理掉的binlog沒有我們預期的效果。


下圖是主庫中記錄的關於purge的警告信息:

技術分享

可以清楚的看到:從庫的IO線程正在讀取文件的情況下,主庫purge master 不會全部清理binlog。



關於purge master logs的一個小實驗