MySQL から ERROR '...' not found (errno:
23)
、Can't open file: ... (errno:
24)
、または errno 23
または
errno 24
とともに他のエラーを受け取った場合、MySQL
に十分なファイル記述子が割り当てられていないことを示しています。perror
ユーティリティを使用して、エラー番号が何を意味しているか、その内容を取得することができます。
shell>perror 23
File table overflow shell>perror 24
Too many open files shell>perror 11
Resource temporarily unavailable
ここでの問題は、mysqld
が非常に多くのファイルを同時に開こうとしていることです。mysqld
が同時に多くのファイルを開かないように指定するか、mysqld
で使用できるファイル記述子の数を増やすことができます。
mysqld
で同時に開くファイルを少なくするために、mysqld_safe
に -O table_cache=32
オプション(初期値は
64)を指定して、テーブルキャッシュを小さくすることができます。max_connections
の値を減らすことで、オープンファイル数(初期値は
90)も少なくなります。
mysqld
で使用できるファイル記述子の数を変更するために、mysqld_safe
に --open-files-limit=#
オプション、または mysqld
に
-O open-files-limit=#
オプションを使用することができます。 See
項4.6.8.4. 「SHOW VARIABLES
」。
これを行う最も簡単な方法は、オプション設定ファイルにオプションを追加することです。
See 項4.1.2. 「my.cnf
オプション設定ファイル」。
これをサポートしていない旧バージョンの
mysqld
を使用している場合は、mysqld_safe
スクリプトを編集することができます。スクリプトにはコメントアウトされた
ulimit -n 256
行があります。'#'
文字を削除してこの行のコメントを解除し、数字
256 を変更することができます。これによって、
mysqld
で使用できるファイル記述数も変わります。
ulimit
(および
open-files-limit
)によって、ファイル記述子の数を増やすことができます。しかし、オペレーティングシステムで定められた上限までしか増やせません。また
'ハード' リミットが存在し、ルートとして
mysqld_safe
または
mysqld
を開始した場合に限り上書きすることができます(この場合、--user=...
オプションも使用する必要があります)。各プロセスで利用できるファイル記述子の数の
OS
制限を増やす必要がある場合は、そのオペレーティングシステムのドキュメントを参照してください。
tcsh
シェルを実行している場合は、ulimit
は機能しません。 tcsh
は、現在の制限について問い合わせると、間違った値を返します。この場合、mysqld_safe
を sh
で開始する必要があります。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.