Open-files-limitパラメータを使用してUbuntu 12.04で実行されているmysql 5.5に問題があります。
1024の制限によるいくつかの問題に最近気づき、実際にはメインシステムの制限が1024に設定されていたため、/ etc/security/limits.confを次のように変更しました。
* soft nofile 32000
* hard nofile 32000
root soft nofile 32000
root hard nofile 32000
その後、ルートとmysqlユーザーのulimit値を確認すると、どちらも新しい値32000が返されたので、変更はすでに行われていると思います。
My.cnfファイルの値も変更し、次のようにopen-files-limitを24000に設定しました。
open-files-limit = 24000
奇妙な部分ですが、mysqlサービスを再起動してopen_files_limit変数を確認すると、それはまだ1024に設定されていることを返すので、以前と同じ問題が(明らかに)open-files-limitを使用しようとしました代わりに、my.cnf構成ファイルのopen_files_limitと同じ結果ですが、サービスコマンドをオーバーライドしてサービスを開始し、mysqld(追加パラメーターなし)のみを使用して開始すると、サービスが開始され、パラメーターを確認すると32000が返されます... my.cnfで設定されておらず、少なくとも自分自身のためではなく、コマンドラインから与えられていないため、その値がどこから取得されているのかわかりません。
なぜそれが変更を機能させないのか、そしてそれを通常の方法で解決する方法についてのアイデアはありますか(サービスを通じてそれを起動する...)?
私はようやく問題を見つけました、それはupstartが/etc/security/limits.confで定義されたパラメーターを使用していないようです、そのため、serviceコマンドを介してmysqlを起動すると(したがって、upstartの下で)、それらは定義された制限をオーバーライドして使用しますデフォルトは1024です。
解決策は、upstartサービスを定義するmysql.confファイルを変更することです。このファイルは/etc/init/mysql.confにあり、事前開始ブロックの前に次の行を追加します。
# NB: Upstart scripts do not respect
# /etc/security/limits.conf, so the open-file limits
# settings need to be applied here.
limit nofile 32000 32000
limit nproc 32000 32000
最初の値はソフト制限を定義し、もう1つはハード制限を定義します。これらの行を追加すると、サービスはmy.confファイルで定義された値を適用して期待どおりに機能します。
この制限は、/ etc/initで定義されているすべてのupstartサービスに適用されるはずです。そのため、オープンファイルの制限で同じ問題が発生しているサービスがある場合は、このソリューションも機能します。