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

解決 MySQL mysqldump「Too many open files」錯誤:調大 open_files_limit 實戰

     編輯:MySQL 綜合教學

執行 mysqldump 備份整庫時,若遇到 Got error: 1105: File './db/data_20070901.MYD' not found (Errcode: 24),且單表備份正常、SELECT 查詢無誤,大概率是作業系統層面的「打開檔案數過多」導致。

錯誤診斷流程

  1. 現象確認:整庫 mysqldump 失敗,單表成功,資料檔案實際存在。
  2. 錯誤碼解碼:執行 perror 24 得到 OS error code 24: Too many open files。
  3. 根因定位:MySQL 預設 open_files_limit 過小(通常 1024),大量表備份時並發打開 .MYD/.MYI/.frm 檔案超過限制。

解決方案:修改 my.cnf 擴大限制

[mysqld]
open_files_limit = 65535  # 建議設為 65535 或更高,視 OS ulimit 而定

關鍵步驟:

  1. 編輯 /etc/my.cnf(或 /etc/mysql/my.cnf),在 [mysqld] 區塊新增上述參數。
  2. 檢查系統限制:ulimit -n 若小於設定值,需同步修改 /etc/security/limits.conf:
    mysql soft nofile 65535
    mysql hard nofile 65535
  3. 重啟 MySQL:systemctl restart mysqld。
  4. 驗證生效:SHOW GLOBAL VARIABLES LIKE 'open_files_limit';。

避坑指南

  • 若使用 systemd 管理 MySQL,還需建立 /etc/systemd/system/mysqld.service.d/limits.conf 設定 LimitNOFILE=65535,並執行 systemctl daemon-reload。
  • open_files_limit 實際生效值受 max_connections、table_open_cache 影響,MySQL 會自動取最大值,建議同步調大 table_open_cache(如 4000+)。

調整後再次執行 mysqldump,錯誤即可徹底消除。此類 OS 層資源限制問題,還常出現在大量連線、大量分區表場景,建議納入上線前檢核清單。

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