| Errno | 含義 | 常見原因 |
| 2 | No such file or directory | 目錄不存在 |
| 13 | Permission denied | 權限不足 |
| 17 | File exists | 文件已存在/臨時文件衝突 |
| 28 | No space left on device | 磁盤滿 |
三大根因與解決
1. 臨時目錄權限不足 (最常見)
現象: MySQL 服務用戶無法在 C:\Windows\TEMP 寫入臨時文件
解決:
- 右鍵
C:\Windows\TEMP → 屬性 → 安全
- 確保 Users 組或 MySQL 服務賬戶擁有 讀寫/修改 權限
- 或修改
my.ini 指定專用臨時目錄:
[mysqld]
tmpdir = "D:/mysql_tmp"
並確保該目錄權限正確
2. 磁盤空間耗盡
檢查: 臨時目錄所在磁盤剩餘空間
解決:
- 清理
C:\Windows\TEMP 臨時文件
- 遷移
tmpdir 到大空間磁盤
- 擴容磁盤
3. 杀毒軟件/安全軟件攔截
典型案例: McAfee 訪問保護禁止 TEMP 目錄寫入
解決:
- 打開 McAfee 控制台 → 訪問保護 → 所有進程 → 掃描項
- 取消勾選 「掃描文件 (寫入磁盤時)」
- 或將 MySQL 數據目錄、臨時目錄加入排除列表
- 企業環境建議配置策略而非禁用掃描
Linux 環境對應排查
# 1. 權限
ls -ld /tmp /var/tmp
# drwxrwxrwt (sticky bit 必須有)
# 2. 磁盤空間
df -h /tmp
# 3. SELinux
getenforce
# Enforcing 時可能阻擋,臨時放行:
setsebool -P mysql_connect_any 1
# 或調整上下文
restorecon -R /var/lib/mysql
# 4. AppArmor (Ubuntu)
aa-status | grep mysql
# 修改 /etc/apparmor.d/usr.sbin.mysqld 添加目錄權限
配置優化建議
[mysqld]
# 獨立臨時目錄 (SSD、大空間、獨立分區)
tmpdir = /mnt/mysql_tmp
# 內存臨時表大小限制,超限轉磁盤
tmp_table_size = 64M
max_heap_table_size = 64M
# 避免臨時表寫磁盤
# 優化查詢、增加索引、調大上述參數
驗證修復
-- phpMyAdmin 或客戶端測試
CREATE TABLE test_tmp (id INT PRIMARY KEY, name VARCHAR(50)) ENGINE=MyISAM;
INSERT INTO test_tmp VALUES (1, 'test');
DROP TABLE test_tmp;
copyright ©
萬盛學電腦網 all rights reserved