首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

解決 MySQL 因 Binlog 佔滿磁碟導致無法啟動的問題

     編輯:MySQL 綜合教學

遇到 MySQL 無法啟動、錯誤日誌顯示 Disk is full writing './mysql-bin.~rec~' (Errcode: 28) 時,通常是二進位日誌(Binlog)佔滿磁碟空間所致。本文記錄完整排查與解決流程,並提供預防復發的配置建議。

一、現象與初步排查

  • 監控報警:網站回傳 502 Bad Gateway,Nginx 正常,SSH 可連線。
  • 重啟 LNMP 發現 MySQL 起不來。
  • 查看錯誤日誌 tail /usr/local/mysql/var/slyar.err 發現:
    Disk is full writing './mysql-bin.~rec~' (Errcode: 28). Waiting for someone to free space...
  • df -h 確認根分區 100% 滿載;ls -lh /usr/local/mysql/var/ 發現 mysql-bin.* 檔案佔用超過 500 MB。

二、緊急處理步驟

  1. 停止 MySQL 服務:/etc/init.d/mysql stop
  2. 刪除舊 Binlog 檔案(謹慎操作,確認無主從同步需求):
    rm -f /usr/local/mysql/var/mysql-bin.*
  3. 啟動 MySQL 驗證:/etc/init.d/mysql start

⚠️ 若 Binlog 正在被使用(如主從同步),直接刪除可能導致同步中斷。生產環境建議改用 PURGE BINARY LOGS TO 'mysql-bin.0000xx'; 或 RESET MASTER;(僅限無從庫時)。

三、根治:關閉不需要的 Binlog

編輯 /etc/my.cnf,在 [mysqld] 區段註釋掉:

# log-bin=mysql-bin
# binlog_format=mixed

儲存後重啟 MySQL:/etc/init.d/mysql restart

四、最佳實踐建議

  • 啟用 expire_logs_days:自動清理超過 N 天的 Binlog,如 expire_logs_days = 7。
  • 限制單檔大小:max_binlog_size = 100M 避免單一檔案過大。
  • 監控磁碟使用率:設置告警閾值(如 80%),提前擴容或清理。
  • 區分主從角色:僅主庫啟用 Binlog;從庫可關閉或啟用 log_slave_updates 視需求而定。

五、延伸:Binlog 佔用空間快速估算

-- 查看目前 Binlog 總大小(MB)
SELECT SUM(FILE_SIZE)/1024/1024 AS total_mb
FROM information_schema.FILES
WHERE FILE_NAME LIKE '%mysql-bin%';

掌握 Binlog 管理與磁碟監控,能有效避免「磁碟滿導致 MySQL 掛掉」這類低級故障。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved