萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL Can't create/write to file (Errcode: 13) 根因排查與三大修復方案

錯誤現象

Can't create/write to file '/tmp/xxx' (Errcode: 13)

MySQL 無法在臨時目錄創建寫入臨時文件(排序、分組、臨時表等操作需要)。

三大核心原因

  1. 臨時目錄權限不足:MySQL 進程用戶無寫入權限
  2. 磁盤空間耗盡:df -h 確認 tmpdir 分區滿
  3. 第三方軟件攔截:殺毒軟件 (360、McAfee) 實時掃描阻塞寫入

臨時目錄確定邏輯

MySQL 按優先級使用:

  1. 啟動參數 --tmpdir=/path
  2. 環境變量 TMPDIR / TEMP / TMP
  3. 系統默認:/tmp、/var/tmp、/usr/tmp

查看當前值:SHOW VARIABLES LIKE 'tmpdir';

修復方案

方案一:配置專用 tmpdir(推薦、根治)

# 1. 創建目錄並授權
mkdir -p /data/mysql_tmp
chown mysql:mysql /data/mysql_tmp
chmod 750 /data/mysql_tmp

# 2. my.cnf 配置
[mysqld]
tmpdir = /data/mysql_tmp

# 3. 重啟生效
systemctl restart mysqld

優點:獨立目錄、可控權限、避開系統 /tmp 清理策略。

方案二:修復系統默認目錄權限

# /tmp 權限應為 1777 (sticky bit)
ls -ld /tmp
# drwxrwxrwt  root root  ... /tmp

# 修正
chmod 1777 /tmp
chown root:root /tmp

方案三:殺毒軟件白名單排除

  • 360:設置 → 白名單 → 添加目錄 → C:\Windows\Temp 或 /tmp
  • McAfee:訪問掃描 → 排除項 → 添加目錄 → 讀寫時排除
  • Windows Defender:病毒和威脅防護設置 → 排除 → 添加文件夾

附錄:MySQL 表修復命令 (誤入本文,供參考)

myisamchk (需停庫)

service mysql stop
myisamchk -r /datadir/db/*.MYI
service mysql start

mysqlcheck (熱修復)

mysqlcheck -r -u root -p dbname
# -r: repair, -a: analyze, -o: optimize

⚠️ 避免 -f 強制修復 (可能刪除損壞數據)。

預防清單

  • 監控 tmpdir 磁盤使用率 (< 80%)
  • 定期清理舊臨時文件 (cron + find /data/mysql_tmp -mtime +1 -delete)
  • MySQL 進程用戶擁有 tmpdir 完全控制權
  • 生產環境禁用殺毒實時掃描 MySQL 數據/臨時目錄
copyright © 萬盛學電腦網 all rights reserved