首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 磁碟滿應對機制:MyISAM 寫入行為、每分鐘檢查、臨時檔案處理

     編輯:MySQL 資料庫相關知識

MySQL 遇到磁碟滿(No space left on device)或配額超限時的內部處理邏輯,針對 MyISAM 表、二進制日誌、索引建立臨時檔案的不同行為。

磁碟滿時的標準行為(MyISAM 寫入)

  1. 每分鐘檢查一次 是否有足夠空間寫入當前列
  2. 有空間 → 繼續寫入,如無事發生
  3. 無空間 → **等待**,每 10 分鐘在錯誤日誌寫入一筆提醒

應對操作

  • 下次檢查時(1分鐘內)
  • 下次檢查時
  • 立即
  • 特例操作:REPAIR / OPTIMIZE / ALTER TABLE / LOAD DATA

    這些操作會建立**大型臨時檔案**,若磁碟滿會導致系統級問題。

    • MySQL 會**自動刪除臨時檔案**
    • 將表標記為 **Crashed(損壞)**
    • ⚠️ ALTER TABLE 例外:舊表保持不變,不標記損壞

    二進制日誌與索引檔案

    同樣遵循上述機制:寫入時檢查空間,滿則等待、記錄日誌。

    實務建議

    • ✅ 設定磁碟使用率告警(如 80% 觸發)
    • ✅ 定期 PURGE BINARY LOGS、清理錯誤日誌、慢查詢日誌
    • ✅ 大表 OPTIMIZE/REPAIR 時預留 2-3 倍表大小的臨時空間
    • ✅ 使用 innodb_file_per_table 便於單表空間管理
    • ✅ 考慮將 tmpdir 指向獨立磁碟/分區

    相關配置參數

    [mysqld]
    tmpdir = /mnt/tmp_mysql      # 臨時檔案目錄
    max_binlog_size = 100M       # 控制單一 binlog 大小
    expire_logs_days = 7         # 自動清理舊 binlog
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved
    目標操作生效時間
    繼續寫入釋放磁碟空間(刪檔、擴容、清理日誌)
    放棄當前執行緒mysqladmin kill thread_id
    解除其他執行緒阻塞Kill 等待該表的執行緒,讓其他執行緒繼續