萬盛學電腦網

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

MySQL "Can't create/write to file C:\Windows\TEMP\#sql" 錯誤徹底解決

錯誤現象

Error: Can't create/write to file 'C:\Windows\TEMP\#sql_718_0.MYD' (Errcode: 17)

大量查詢、臨時表、排序操作觸發,導致服務不可用。

五大常見原因

  1. 權限不足:C:\Windows\TEMP 缺少 Users 組讀寫權限
  2. 磁盤滿:臨時目錄所在分區無可用空間
  3. 殺毒軟件攔截:McAfee 等訪問保護禁止 TEMP 寫入
  4. 掃描策略:McAfee「寫入磁盤時掃描」鎖定文件
  5. 殘留文件:舊臨時文件 #sql_*.MYD 未清理

推薦解決方案:修改臨時目錄(最穩健)

1. 創建專用臨時目錄

mkdir D:\mysqltmp\temp
# 授予 MySQL 服務賬號完全控制權限

2. 修改 my.ini

[mysqld]
tmpdir="D:/mysqltmp/temp/"

3. 重啟服務

net stop mysql
net start mysql

4. 配置殺毒軟件排除(若裝有 McAfee)

  • 打開 McAfee VirusScan 控制台
  • 按訪問掃描程序 → 屬性 → 所有進程 → 檢測項 → 排除項
  • 添加 D:\mysqltmp\temp,勾選「讀取時」「寫入時」排除

備選方案:清理與權限修復

# 1. 清空系統 TEMP
del /q /s C:\Windows\TEMP\*

# 2. 授權(管理員 CMD)
icacls "C:\Windows\TEMP" /grant Users:(OI)(CI)F /T

原理深度解析

  • MySQL 執行複雜查詢(ORDER BY、GROUP BY、JOIN、子查詢)時需創建內部臨時表
  • 臨時表默認寫入 tmpdir 指定目錄,默認為系統 TEMP
  • Errcode 17 = EEXIST(文件已存在)或權限拒絕,實際多為殺毒軟件持有句柄導致創建失敗
  • 修改 tmpdir 至專用目錄可避開系統目錄權限、殺毒、磁盤空間三大風險

驗證生效

SHOW VARIABLES LIKE 'tmpdir';
-- 應顯示 D:\mysqltmp\temp\
copyright © 萬盛學電腦網 all rights reserved