首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

MySQL「Got error 28 from storage engine」錯誤排查:tmp 分區滿載導致觸發器查詢失敗

     編輯:關於SqlServer

現象描述

在虛擬機環境中建立觸發器成功,但執行 SHOW TRIGGERS 時拋出錯誤:

ERROR 1030 (HY000): Got error 28 from storage engine

進一步查看錯誤詳情:

mysql> SHOW ERRORS;
+-------+------+--------------------------------------------------------+
| Level | Code | Message                                                |
+-------+------+--------------------------------------------------------+
| Error | 1030 | Got error 28 from storage engine                       |
| Error |    6 | Error on delete of '/tmp/#sql_1515_0.MYI' (Errcode: 2) |
+-------+------+--------------------------------------------------------+

根因分析

  1. 錯誤代碼 28:MySQL 內部錯誤,對應作業系統錯誤碼 6
  2. perror 6 解碼:No such device or address,指向 /tmp/#sql_1515_0.MYI 臨時文件操作失敗
  3. 磁碟空間檢查:執行 df -h 發現系統盤 /dev/sda1 使用率 100%(4.9G 已滿),而 MySQL 資料目錄掛載在 /dev/sdb1(僅 30% 使用率)
[root@ytt david.yang]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       4.9G  4.9G     0 100% /
tmpfs           252M     0  252M   0% /dev/shm
/dev/sdb1       9.9G  2.8G  6.6G  30% /opt/sdb

解決方案

清理系統盤 / 下的無用文件(如舊日誌、臨時文件、快取),釋放空間:

[root@ytt david.yang]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       4.9G  3.5G  1.1G  77% /
tmpfs           252M     0  252M   0% /dev/shm
/dev/sdb1       9.9G  2.8G  6.6G  30% /opt/sdb

空間釋放後,SHOW TRIGGERS 即恢復正常。

深度洞察與建議

  • 錯誤訊息誤導性強:Error 28 未直接提示磁碟空間不足,需結合 perror 與 df 診斷
  • tmp 目錄獨立掛載的重要性:生產環境建議將 /tmp 掛載到獨立分區並設定配額監控
  • MySQL 臨時表機制:SHOW TRIGGERS 等元資料查詢會建立臨時 MyISAM 表於 tmpdir,空間不足直接導致存儲引擎報錯

預防措施

  1. 監控系統盤與 tmpdir 所在分區使用率
  2. 配置 tmpdir 指向大容量分區:tmpdir = /opt/sdb/tmp
  3. 定期清理系統日誌與臨時文件
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved