[MySQL] Replication 模式下,Master 主機清除過多 Binlog 的作法

本篇文章更新時間:2020/03/05
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~


主機空間爆滿不夠用,這件事隨著經營一段時間後非常有機會發生。其中一個原因可能與 MySQL 的 Binlog 記錄檔案也脫離不了關係。

關於 Binlog 網路資源已經很多介紹,這裡也不多提了。就是一種帶有時序的 SQL 指令紀錄檔案。

由於 MySQL 在 Replication 模式下 Master 產生的 Binlog 是 Slave 同步的重要檔案(預設名 mysql-bin.000XXX)。如果因為這些檔案太大導致空間不夠用需要縮減,那要非常小心的操作,絕對不能冒然自己隨意刪除。

首先到 每一個 Slave 的 MySQL 主機上確認同步到哪份 Binlog 了:

SHOW SLAVE STATUS;

找到與記下那個最小的設定紀錄檔案名稱末端編號。再 Master 主機上確認紀錄檔案:

SHOW MASTER LOGS;

然後清除這邊號之前的紀錄:(假設最小的是 055)

PURGE MASTER LOGS TO 'mysql-bin.000054';

這樣一來就能把已經同步過的紀錄檔案刪除,保留正在同步的紀錄檔案等待同步。

如果要一次全清不管他的話(又或是已經都同步完了),可以輸入:

RESET MASTER;

把紀錄檔 Binlog 一次全部刪除!

後記

主機容量會爆掉的可能性很多,使用量越高更是越快,有時候不需要保留太多天份的檔案備存,所以可以把 binlog_expire_logs_seconds 設定改小一點,此設定單位為秒數。(舊版本的 MySQL 是 expire_logs_days 用天為單位去除過期紀錄)。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *