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

phpMyAdmin 顯示表「使用中」且修復失敗?磁碟空間不足才是真兇

     編輯:MySQL 綜合教學

phpMyAdmin 顯示表「使用中」且修復失敗?磁碟空間不足才是真兇

phpMyAdmin 中多張 MyISAM 表狀態顯示 「使用中」,點擊「修復表」報錯 can't create new temp file,「分析表」「優化表」同樣失敗。嘗試 myisamchk -r -f 強制修復亦無效。

根因定位:磁碟空間耗盡

MyISAM 修復/優化/分析操作均需在數據目錄下創建臨時文件 (*.TMD、*.TMP),磁碟剩餘空間為 0 時無法創建,導致所有維護操作失敗。表標記為「使用中」實為上次操作中斷留下的鎖狀態,非實際損壞。

完整修復步驟 (停機維護窗口)

  1. 停止 MySQL 服務:net stop mysql (Windows) / systemctl stop mysqld (Linux)。
  2. 備份整個數據目錄:複製 datadir 至安全位置,防誤操作。
  3. 處理殘留臨時文件:在表對應的 .MYD 同級目錄下,若發現 *.TMD 文件,重命名為 *.MYD 覆蓋原文件 (或刪除原 .MYD 後改名)。
  4. 離線修復:進入 bin 目錄執行:
    myisamchk -r /path/to/datadir/db_name/*.MYI
  5. 啟動 MySQL:net start mysql / systemctl start mysqld。
  6. 線上優化檢查:
    mysqlcheck -o -r db_name -u root -p
    輸入密碼後執行,應無錯誤輸出。

磁碟清理實操 (釋放空間)

  • 清理系統臨時文件:/tmp、/var/tmp、Windows %TEMP%。
  • 清理舊備份/日誌:find /backup -mtime +7 -delete,truncate -s 0 /var/log/mysql/*.log (需 FLUSH LOGS)。
  • 清理 Docker/容器殘留:docker system prune -a。
  • 擴容或掛載新磁碟到 datadir (LVM 在線擴容/掛載新分區)。

預防機制

  1. 監控告警:Zabbix/Prometheus 監控 disk_free,閾值 < 15% 報警。
  2. 定時清理:cron 定期清理臨時文件、舊備份、Binlog (配合 expire_logs_days / binlog_expire_logs_seconds)。
  3. 表引擎選型:新表優先 InnoDB,避免 MyISAM 表級鎖與修復依賴臨時文件的脆弱性。
  4. 保留空間:文件系統預留 5% root 保留塊 (tune2fs -m 5 /dev/vg/lv),防寫滿導致 root 也無法登入清理。

常見誤區

誤區真相
以為表損壞需重建多數是空間不足導致臨時文件創建失敗,空間恢復後自動正常
用 REPAIR TABLE 線上修復MyISAM 線上修復同樣需臨時文件,空間不足時必失敗
忽略 .TMD 文件它是修復中斷留下的中間文件,直接改名可救數據

遇到「使用中」+「修復失敗」+「can't create new temp file」,第一時間查磁碟空間 (df -h),九成九是滿了。

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