關於purge master logs的一個小實驗
阿新 • • 發佈:2017-11-03
關於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的一個小實驗