首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL "Can't create/write to file" 錯誤排查:tmpdir 權限、磁碟空間、配置調整

     編輯:MySQL 資料庫相關知識

錯誤現象

ERROR 1 (HY000): Can't create/write to file '/tmp/sqlxxxx.ism' (Errcode: 28)

Errcode 28 = No space left on device (磁碟滿)。

三大根因與解決

1. tmpdir 磁碟空間不足

  • 預設 /tmp 往往掛載在小根分區。
  • 修改配置指向大容量磁碟:
    [mysqld]
    tmpdir = /data/mysql_tmp
  • 目錄需預建、mysql 用戶可讀寫執行 (rwx)。

2. 目錄權限問題

  • ls -ld /tmp 檢查擁有者/權限。
  • 修正:chown mysql:mysql /data/mysql_tmp && chmod 1777 /data/mysql_tmp (sticky bit 防誤刪)。
  • SELinux/AppArmor 可能阻攔,檢查 audit.log 或暫時設為 Permissive 驗證。

3. 磁碟真正滿了

df -h /tmp
df -h /var/lib/mysql
# 釋放空間:清理舊備份、壓縮日誌、刪除臨時表殘留 #sql* 檔案

perror 工具快速查錯誤碼

shell> perror 28
OS error code  28:  No space left on device

臨時表產生場景

  • ORDER BY/GROUP BY 不走索引需臨時表排序。
  • UNION、DISTINCT、JOIN (衍生表)。
  • EXPLAIN 出現 Using temporary 即會寫 tmpdir。

最佳實踐

  1. 將 tmpdir 掛載獨立大容量 SSD/NVMe,掛載選項 noatime,nodev,nosuid。
  2. 監控 Created_tmp_disk_tables 狀態變數,持續增長表示查詢優化空間大。
  3. 大查詢預估臨時表大小,必要時調大 tmp_table_size/max_heap_table_size 讓記憶體臨時表承載更多。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved