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

mysqldump 報錯 "Got error 28 from storage engine" 根因與秒解:磁碟空間不足

     編輯:MySQL 綜合教學

mysqldump 報錯 "Got error 28 from storage engine" 根因與秒解

執行 mysqldump 備份時遭遇:

mysqldump: Couldn't execute 'SHOW TRIGGERS LIKE 'userlog'': Got error 28 from storage engine (1030)

錯誤代碼 28 含義

MySQL 錯誤代碼 28 (OS error code 28) = No space left on device (磁碟空間不足)。儲存引擎在建立臨時表/排序檔案時無法寫入磁碟。

快速診斷

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       9.5G  9.1G     0 100% /
/dev/sda4       3.2G   70M  3.0G   3% /mnt/backup

根分區 / 已滿 (100%),MySQL 資料目錄通常在 /var/lib/mysql (掛載在 /),無法建立臨時檔案導致備份失敗。

解決方案

  1. 清理空間 (立即生效):
    # 清理系統日誌
    journalctl --vacuum-time=7d
    # 清理 apt/yum 快取
    apt-get clean  # 或 yum clean all
    # 刪除舊備份/臨時檔
    rm -f /tmp/*.sql /var/tmp/*
    # 遷移大檔案到備份分區
    mv /var/log/large.log /mnt/backup/
  2. 調整 mysqldump 輸出目錄 (規避根分區):
    mysqldump -u root -p db_name > /mnt/backup/db_backup.sql
  3. 擴容根分區 (永久解決):LVM 擴展、增加磁碟、調整分區大小
  4. 設定 tmpdir 指向大分區:
    # my.cnf
    [mysqld]
    tmpdir = /mnt/backup/tmp

驗證修復

# 清理後重新備份
mysqldump -u root -p db_name > /mnt/backup/db_backup.sql
# 應正常完成

預防建議

  • 監控磁碟使用率 (設定 80% 告警)
  • 定期清理 Binary Log (expire_logs_days / binlog_expire_logs_seconds)
  • 備份輸出目錄掛載在獨立大容量分區
  • 使用 --single-transaction 減少鎖爭用,但仍需磁碟空間存放輸出

核心提醒:Error 28 幾乎總是磁碟滿,而非 MySQL 內部邏輯錯誤。先 df -h,再清理/遷移/擴容,問題即解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved