如果您收到 ERROR '
、file_name
' not found (errno: 23)Can't open file:
或任何其他來自 MySQL 且帶有 file_name
(errno: 24)errno 23
或 errno 24
的錯誤,這表示您沒有為 MySQL 伺服器配置足夠的檔案描述符。您可以使用 perror 公用程式來取得錯誤號碼的含義說明。
$> perror 23
OS error code 23: File table overflow
$> perror 24
OS error code 24: Too many open files
$> perror 11
OS error code 11: Resource temporarily unavailable
這裡的問題是 mysqld 嘗試同時保持開啟過多的檔案。您可以告訴 mysqld 不要一次開啟這麼多檔案,或者增加可供 mysqld 使用的檔案描述符數量。
要告訴 mysqld 一次保持開啟較少的檔案,您可以透過減少 table_open_cache
系統變數的值(預設值為 64)來縮小表格快取。這可能無法完全防止檔案描述符不足的情況,因為在某些情況下,伺服器可能會嘗試臨時擴展快取大小,如 第 10.4.3.1 節「MySQL 如何開啟和關閉表格」中所述。減少 max_connections
的值也會減少開啟的檔案數量(預設值為 100)。
要變更可供 mysqld 使用的檔案描述符數量,您可以使用 --open-files-limit
選項到 mysqld_safe 或設定 open_files_limit
系統變數。請參閱 第 7.1.8 節「伺服器系統變數」。設定這些值的最簡單方法是將選項新增到您的選項檔案中。請參閱 第 6.2.2.2 節「使用選項檔案」。如果您有不支援設定開啟檔案限制的舊版 mysqld,您可以編輯 mysqld_safe 腳本。腳本中有一行被註解掉的 ulimit -n 256。您可以移除 #
字元來取消註解這行,並將數字 256
變更為要提供給 mysqld 的檔案描述符數量。
--open-files-limit
和 ulimit 可以增加檔案描述符的數量,但只能增加到作業系統施加的限制。還有一個 「硬性」限制,只有在您以 root
身分啟動 mysqld_safe 或 mysqld 時才能覆蓋(只要記住在這種情況下您還需要使用 --user
選項啟動伺服器,這樣它在啟動後就不會繼續以 root
身分執行)。如果您需要增加作業系統對每個程序可用的檔案描述符數量的限制,請參閱您系統的文件。
如果您執行 tcsh shell,ulimit 無效!當您要求目前限制時,tcsh 也會報告不正確的值。在這種情況下,您應該使用 sh 啟動 mysqld_safe。