遇到 MySQL 無法啟動、錯誤日誌顯示 Disk is full writing './mysql-bin.~rec~' (Errcode: 28) 時,通常是二進位日誌(Binlog)佔滿磁碟空間所致。本文記錄完整排查與解決流程,並提供預防復發的配置建議。
502 Bad Gateway,Nginx 正常,SSH 可連線。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。/etc/init.d/mysql stoprm -f /usr/local/mysql/var/mysql-bin.*/etc/init.d/mysql start⚠️ 若 Binlog 正在被使用(如主從同步),直接刪除可能導致同步中斷。生產環境建議改用
PURGE BINARY LOGS TO 'mysql-bin.0000xx';或RESET MASTER;(僅限無從庫時)。
編輯 /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 避免單一檔案過大。log_slave_updates 視需求而定。-- 查看目前 Binlog 總大小(MB)
SELECT SUM(FILE_SIZE)/1024/1024 AS total_mb
FROM information_schema.FILES
WHERE FILE_NAME LIKE '%mysql-bin%';
掌握 Binlog 管理與磁碟監控,能有效避免「磁碟滿導致 MySQL 掛掉」這類低級故障。