本機制針對 MyISAM 表寫入、二進制日誌、二進制索引文件 寫入時磁盤空間不足(ENOSPC)或超配額(EDQUOT)場景。InnoDB 表空間滿時行為不同(由 innodb_max_dirty_pages_pct 等參數控制)。
Disk is full writing to ...PURGE BINARY LOGS BEFORE '2024-01-01';SHOW PROCESSLIST;
-- 找到 State: "Waiting for disk space" 的線程 ID
KILL ;
下次檢查週期(1 分鐘內)該線程會終止,釋放鎖讓其他線程繼續。
若多個線程因同表阻塞,優先 KILL 寫入量最大/優先級最低的線程,釋放鎖讓高優先級業務先行。
| 操作 | 磁盤滿時行為 |
|---|---|
REPAIR TABLE | 刪除大臨時文件,標記表為 崩潰,需 REPAIR 恢復 |
OPTIMIZE TABLE | 同上,表標記崩潰 |
LOAD DATA INFILE / ALTER TABLE 批量建索引 | 刪除臨時文件,表標記崩潰 |
ALTER TABLE(非批量索引) | 舊表保持不變,操作回滾 |
df -h 與 SHOW VARIABLES LIKE 'datadir' 所在分區使用率,閾值 80% 報警innodb_max_dirty_pages_pct、innodb_log_file_size 避免 InnoDB 突發佔滿expire_logs_days 或 binlog_expire_logs_seconds 自動清理 Binloginnodb_file_per_table=ON 便於單表遷移磁盤滿是少數會導致 MySQL 拒絕寫入但不崩潰 的錯誤,給運維留出彈性處理窗口——前提是監控到位。