萬盛學電腦網

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

MySQL Can't create/write to file 錯誤排查與解決

MySQL "Can't create/write to file" 錯誤完整排查指南

phpMyAdmin 創建表報錯 Error: Can't create/write to file 'C:/WINDOWS/TEMP/#sql_738_0.MYD' (Errcode: 17),本文系統分析三大根因及解決方案。

錯誤碼對照

三大根因與解決

1. 臨時目錄權限不足 (最常見)

現象: MySQL 服務用戶無法在 C:\Windows\TEMP 寫入臨時文件

解決:

  1. 右鍵 C:\Windows\TEMP → 屬性 → 安全
  2. 確保 Users 組或 MySQL 服務賬戶擁有 讀寫/修改 權限
  3. 或修改 my.ini 指定專用臨時目錄:
    [mysqld]
    tmpdir = "D:/mysql_tmp"
    並確保該目錄權限正確

2. 磁盤空間耗盡

檢查: 臨時目錄所在磁盤剩餘空間

解決:

  • 清理 C:\Windows\TEMP 臨時文件
  • 遷移 tmpdir 到大空間磁盤
  • 擴容磁盤

3. 杀毒軟件/安全軟件攔截

典型案例: McAfee 訪問保護禁止 TEMP 目錄寫入

解決:

  1. 打開 McAfee 控制台 → 訪問保護 → 所有進程 → 掃描項
  2. 取消勾選 「掃描文件 (寫入磁盤時)」
  3. 或將 MySQL 數據目錄、臨時目錄加入排除列表
  4. 企業環境建議配置策略而非禁用掃描
  5. 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
Errno含義常見原因
2No such file or directory目錄不存在
13Permission denied權限不足
17File exists文件已存在/臨時文件衝突
28No space left on device磁盤滿