本文介紹了一次運維實踐中relay-log長期沒法自動刪除的緣由和解決過程mysql
背景: 今天在運維一個mysql實例時,發現其數據目錄下的relay-log 長期沒有刪除,已經堆積了幾十個relay-log。 然而其餘做爲Slave服務器實例卻沒有這種狀況。sql
經過收集到的信息,綜合分析後發現relay-log沒法自動刪除和如下緣由有關。服務器
簡而言之就是: 一個實例若是以前是Slave,而以後停用了(stop slave),且沒有配置expire-logs-days的狀況下,會出現relay-log堆積的狀況。運維
順帶也和你們分享下MySQL 內部Logrotate的機制fetch
max_binlog_size
,若是超過則自動生成一個binlog filemax_relay_log_size
若是超過則自動生成一個新的relay-log-filepurge-relay-log
在SQL Thread每執行完一個events時判斷,若是該relay-log 已經再也不須要則自動刪除expire-logs-days
只在 實例啓動時 和 flush logs 時判斷,若是文件訪問時間早於設定值,則purge file (同Binlog file) (updated: expire-logs-days和relaylog的purge沒有關係) expire-logs-days
, 不然當咱們的外部腳本因意外而中止時,還能有一層保障。所以建議當slave再也不使用時,經過reset slave來取消relaylog,以避免出現relay-log堆積的狀況。code