我正在嘗試在 a 上執行 mysqldump視窗伺服器,我得到以下信息錯誤訊息:
mysqldump: Got error: 23: Out of resources when opening file '.\db\sometable.MYD' (Errcode: 24) when using LOCK TABLES
這是命令我在跑 :
mysqldump -u user -p"pass" --lock-tables --default-character-set=latin1 -e --quick databasename > "query.sql"
重新啟動 mysql 服務沒有幫助。
我總是收到同一張桌子的訊息。
我嘗試過減少表緩存和最大連線數變數分別從 64 到 32 和 30 到 10,但這次對於不同的表我仍然收到錯誤(從現在開始,錯誤訊息總是提到第二個表)。
相同的腳本正在其他十幾個上運行視窗具有相同資料庫的伺服器沒有問題。
所有資料庫都有 85 個表。
答案1
根據這裡- “作業系統錯誤代碼 24:太多開啟的檔案”,與更常見的錯誤 23“資源不足”一致。
所以看起來好像你的文件句柄用完了。這通常是 MySQL 或作業系統本身的伺服器端設定/問題。
也許檢查/調整--open-files-limit
環境MySQL 本身,看看是否有幫助。
另外,也許嘗試在沒有其他人使用資料庫時運行轉儲,並使用--single-transaction
環境而不是--Lock-File
,正如一些人建議的那樣,這將一次工作一張表,而不是一次打開它們(因此使用更少的文件句柄)。
除此之外,您可能必須找到該特定伺服器資源耗盡的根本原因。這可能需要透過停用盡可能多的服務/進程來進行故障排除,並查看轉儲是否通過。然後從那裡找出誰是消耗了太多資源並且可能沒有正確釋放資源的罪魁禍首。
答案2
您是否可以嘗試使用--single-transaction
而不是--lock-tables
例如表是 InnoDB 並且您沒有使用 Cluster 表並且 ALTER TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE 在轉儲期間不會發生?如果您有 MySQL 支援組織,最好與您確認這一點是否可行。
我只在unix上嘗試過這個,但基本上如果我嘗試使用具有2000個表的資料庫,它會失敗並出現與您類似的錯誤,例如我已經使用了所有打開的文件句柄。
答案3
您可能會收到此錯誤:
MySQL:使用 LOCK TABLES 時發生錯誤代碼:24
……當您升級到 MySQL 5.5 並在 Plesk 或任何其他正在執行的作業系統上執行備份時,會出現其他錯誤mysqldump
。
修理:
- 編輯
my.cnf
添加:
open_files_limit=2048
重啟MySQL
如果您收到:
無法從 mysql.proc 載入。該表可能已損壞 (1548)
這是升級到 5.5 的結果。執行:
mysql_upgrade --force
在 CentOS 6.7 和 Plesk 12 上進行了測試和工作。
答案4
我和菲利普有類似的問題。當我開始轉儲時,我看到了這樣的錯誤:
mysqldump: Got error: 23: Out of resources when opening file './c1baznarz/timecard.MYD' (Errcode: 24) when using LOCK TABLES
我使用了簡單的指令:
mysqldump -uroot -p c1baznarz > c1baznarz.sql
因此,我向 mysqldump 添加另一個命令:
--single-transaction
轉儲已準備就緒。所以,我的所有 mysqldump 查詢如下所示:
mysqldump -uroot -p --lock-tables --single-transaction c1baznarz > c1baznarz.sql