MySQL Linux伺服器快照克隆引起的binlog日誌無法正常刪除導致檔案系統滿

清風艾艾發表於2022-12-03

      最近,一個mysql資料庫Linux伺服器檔案系統空間滿,檢視是binlog消耗絕大部分空間;經瞭解mysql資料庫每天進行全備並刪除1天前binlog日誌;然而,2022.11.15日開始的binlog均沒刪除,後續瞭解到linux伺服器被快照克隆,檢視mysql錯誤日誌發現2022.11.15日誌提示shutdown normal,負責人反饋直接重啟作業系統未關閉mysql。由此,猜測克隆時的binlog日誌被損壞,mysql識別不到binlog日誌,後續的binlog日誌無法刪除積累直到檔案系統空間滿。後續處理,2022.12.2當天將2022.11.28之前的binlog移動到其他檔案系統,重啟mysql時日誌提示找不到被移走的binlog日誌,使用purge命令指定刪除7天前和2022.11.28 00:00:00的日誌清理失敗,最後purge特定binlog前的日誌成功。

      一、問題現象

     檔案系統滿,mysql無法啟動,system-lv_*對應的檔案系統為故障檔案系統,這裡看到的是已經緊急擴了300G,

處理故障時可用空間只有48MB。


     二、問題分析

    根據經驗可能是Mysql binlog日誌佔用過多空間,檢視binlog保留時間為0,此是可疑點。


詢問運維人員反饋該mysql備份策略為每天全備並刪除一天的binlog日誌

備份軟體備份任務提示均是成功的

然而,2022-12-02之前的binlog直到2022-11-15的都存在,這裡只顯示部分,根據統計一天的binlog有近60G,積累了18天的binlog有一個TB。到這裡,備份軟體是有問題的,binlog實際沒有刪除仍然提示成功並且沒有預警。

     後續問題分析,經溝通,該mysql伺服器在2022-11-15做過快照克隆,操作直接shutdow -h now關閉主機,mysql 錯誤日誌提示shutdown normal並提示mysqld被force關閉。

     到此,猜測資料庫被異常關閉binlog損壞導致binlog無法正常刪除。

     三、問題處理

 將部分日誌移動到/home/mysqlbinlog資料夾下,重啟mysql提示被移走的binlog找不到

只能將日誌移動回來,指定日期purge清理binlog日誌,命令提示成功,但是binlog並沒有從檔案系統刪除。

指定刪除7天前的binlog進行purge清理 ,命令提示成功,但是binlog並沒有從檔案系統刪除。

指定特定的binlog方式purge之前的所有binlog日誌,命令提示成功,檔案系統釋放成功

再次執行清理2022-11-30之前的binlog日誌,能夠成功清理

清理完binlog日誌後,重啟mysql正常

   四、總結

    mysql及其附屬主機維護,主機關閉前一定要正常將mysql關閉掉;

    mysql開啟binlog時一定要設定expire_logs_days引數;

    備份軟體需要改進,不能只憑purge命令返回結果就任務操作執行完成成功,還需要實際判斷檔案系統空間用量釋放情況。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29357786/viewspace-2926570/,如需轉載,請註明出處,否則將追究法律責任。

相關文章