如果遇到“ERROR '...'未發現(errno: 23)”,“無法打開文件:... (errno: 24)”,或來自MySQL的具有errno 23或errno 24的其它錯誤,它表示未為MySQL服務器分配足夠的文件描述符。你可以使用perror實用工具來了解錯誤編號的含義:
shell> perror 23
錯誤代碼23:文件表溢出
shell> perror 24
錯誤代碼24:打開文件過多
shell> perror 11
錯誤代碼11:資源暫時不可用
這裡的問題是,mysqld正試圖同時打開過多的文件。你可以通知mysqld不要一次打開過多文件,或增加MySQLd可用文件描述符的數目。
要想通知MySQLd將一次打開的文件控制在較小的數目上,可降低table_cache系統變量的值(),從而減少表高速緩沖(默認值為64)。降低max_connections的值也能降低打開文件的數目(默認值為100)。
要想更改mysqld可用的文件描述符的數目,可在mysqld_safe上使用“--open-files-limit”選項或設置(自MySQL 3.23.30開始)open_files_limit系統變量。
設置這些值的最簡單方式是在選項文件中增加1個選項。
如果mysqld的版本較低,不支持設置打開文件的數目,可編輯mysqld_safe腳本。在腳本中有1個注釋掉的行ulimit -n 256。你可以刪除‘#’字符取消對該行的注釋,更改數值256,以設置MySQLd可用的文件描述符數目。
“--open-files-limit”和ulimit能夠增加文件描述符的數目,但最高不能超過操作系統限制的數目。此外還有1個“硬”限制,僅當以根用戶身份啟動mysqld_safe或MySQLd時才能覆蓋它(請記住,在該情況下,還需使用“--user”選項啟動服務器,以便在啟動後不再以根用戶身份繼續運行)。如果需要增加操作系統限制的對各進程可用文件描述符的數目,請參閱系統文檔。
注釋:如果運行tcsh shell,ulimit不工作!請求當前限制值時,tcsh還能通報不正確的值。在該情況下,應使用sh啟動MySQLd_safe。