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

MySQL「Can't create/write to file (Errcode: 13)」錯誤排查與解決方案

     編輯:MySQL 綜合教學

MySQL 報錯 Can't create/write to file xxx (Errcode: 13) 通常發生在需要建立臨時檔案的操作中(ORDER BY、GROUP BY、UNION、大結果集排序等)。本文分析三大根因並提供對應解決方案。

MySQL 臨時檔案機制

  • 預設目錄由環境變數 TMPDIR/TEMP/TMP 決定,系統預設通常為 /tmp、/var/tmp、C:\Windows\Temp。
  • 臨時檔案以隱含方式建立,mysqld 結束時自動清理。
  • 排序、分組、衍生表等操作會產生臨時檔案/表。

三大常見根因

原因現象排查指令
目錄權限不足MySQL 進程用戶無寫入權限ls -ld /tmp、ps aux | grep mysql 確認用戶
磁碟空間/Inode 耗盡df -h 顯示 100% 或 df -i Inode 滿df -h /tmp、df -i /tmp
第三方軟體攔截防毒軟體、EDR、備份軟體鎖定/掃描臨時檔查看防毒日誌、暫時停用測試

解決方案

方案一:修改 MySQL 臨時目錄(推薦,根治權限/空間問題)

編輯 my.cnf / my.ini 的 [mysqld] 區段:

[mysqld]
tmpdir = /data/mysql_tmp   # Linux
tmpdir = D:/mysql_tmp      # Windows

確保目錄存在、權限正確(chown mysql:mysql /data/mysql_tmp; chmod 1777 /data/mysql_tmp),重啟 MySQL 生效。

方案二:清理臨時目錄釋放空間

# 清理舊檔(謹慎執行)
find /tmp -type f -mtime +1 -name 'mysql*' -delete
# 或手動清理大檔
ls -lh /tmp | head -20

方案三:防毒軟體白名單排除

  • 360/火綿/Windows Defender:加入 tmpdir 目錄至信任區/排除掃描。
  • McAfee:存取掃描 → 排除項 → 新增目錄 → 選「讀取時/寫入時」排除。
  • Linux ClamAV/其他:配置 ExcludePath。

附錄:MySQL 表修復指令(備查)

若因臨時檔案錯誤導致表損壞:

# myisamchk(需停機)
service mysql stop
myisamchk -r /var/lib/mysql/dbname/*.MYI
service mysql start

# mysqlcheck(線上熱修復,僅 MyISAM)
mysqlcheck -r -u root -p dbname

# phpMyAdmin:選擇表 → 底部「修復表」

⚠️ 避免使用 -f 強制修復,可能刪除損壞資料列。

預防建議

  1. 專用磁碟/分區掛載 tmpdir,避免與系統盤爭搶空間。
  2. 監控 tmpdir 磁碟使用率(>80% 告警)。
  3. 大查詢優化:避免不必要的 ORDER BY/GROUP BY、增加 LIMIT、使用覆蓋索引減少臨時表大小。
  4. 定期檢查 SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables',磁碟臨時表過多需優化 SQL 或調大 tmp_table_size/max_heap_table_size。

臨時檔案錯誤看似簡單,實則反映資源規劃與安全策略的缺口,系統性解決才能一勞永逸。

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