MySQL から 「エラー '...' が見つかりません (エラー番号: 23)」
、「ファイル ... をオープンできません (エラー番号: 24)」
、あるいは「エラー番号 23」
または「エラー番号 24」
のその他のエラーを受け取る場合は、MySQL サーバーに十分なファイルディスクリプタが割り当てられていないことを意味します。perror ユーティリティーを使用すると、エラー番号の意味の説明を取得できます。
shell> perror 23
OS error code 23: File table overflow
shell> perror 24
OS error code 24: Too many open files
shell> perror 11
OS error code 11: Resource temporarily unavailable
ここでの問題は、mysqld が同時にオープンしたままにしようとしているファイルが多すぎることです。一度に多数のファイルをオープンしないように mysqld に通知するか、mysqld が使用できるファイルディスクリプタの数を増やします。
一度にオープンするファイル数を少なくするように mysqld に通知するには、table_open_cache
システム変数の値 (デフォルト値は 64) を減らすことによってテーブルキャッシュを小さくします。セクション8.4.3.1「MySQL でのテーブルのオープンとクローズの方法」で説明されているように、状況によっては、サーバーがキャッシュサイズを一時的に拡張しようとする可能性があるため、これによってファイルディスクリプタの不足を完全に防ぐことはできません。max_connections
の値を減らすことによっても、オープンファイルの数が減少します (デフォルト値は 100)。
mysqld が使用できるファイルディスクリプタの数を変更するには、mysqld_safe に --open-files-limit
オプションを使用するか、open_files_limit
システム変数を設定します。セクション5.1.4「サーバーシステム変数」を参照してください。これらの値を設定するもっとも簡単な方法は、オプションファイルにオプションを追加することです。セクション4.2.6「オプションファイルの使用」を参照してください。オープンファイルの制限の設定をサポートしていない古いバージョンの mysqld を使用している場合は、mysqld_safe スクリプトを編集できます。このスクリプトには、コメントアウトされた行 ulimit -n 256 があります。「#
」 文字を削除してこの行をコメント解除し、数字 256
を変更して、mysqld が使用できるファイルディスクリプタの数を設定します。
--open-files-limit
および ulimit を使用すると、ファイルディスクリプタの数を増やすことができますが、オペレーティングシステムが課している制限が上限となります。mysqld_safe または mysqld を root
として起動した場合にのみオーバーライドできる「堅固な」制限もあります (この場合、起動後に root
として実行され続けないように、--user
オプションを指定してサーバーを起動する必要もあります)。各プロセスで使用できるファイルディスクリプタの数に関するオペレーティングシステムの制限を緩める必要がある場合は、システムのドキュメントを参照してください。
tcsh シェルを実行している場合、ulimit は機能しません。また、tcsh では、現在の制限を問い合わせたときに不正な値が報告されます。この場合は、sh を使用して mysqld_safe を起動してください。