如果您收到 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。