buntu: 12.04 LTS(Linux mysql02 3.2.0-40-generic#64-Ubuntu SMP Mon Mar 25 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux)
MySQL: Ubuntu distro 5.5.31
Apparmor:削除されました!
サーバーは1年以上も安定して稼働しています。その後、この月曜日のMySQLは失敗し始めました。更新が問題の原因であり、それが何であるかを把握することはできません。 MySQL 5.5.30にロールバックしようとしましたが、運はありませんでした。 5.5.31に戻りました。
MySQLエラーログエントリ:
130430 7:55:46 [ERROR] Error in accept: Too many open files
130430 7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/fclvod.frm' (errno: 24)
130430 7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/fcnote.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/ffcont.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/ffcontv.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/ffnote.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_Elite_test/frcfcl.frm' (errno: 24)
Ulimitの問題が発生しているようです。 APPARMORを完全に削除しました。 / etc/security/limits.confを増やしましたが、まだ運がありません:
# Out of desperation....
* soft nofile 49152
* hard nofile 65536
# No effect!?!!?
#mysql soft nofile 49152
#mysql hard nofile 65536
そして、limits.confが機能していることを示すには:
root@mysql02:/etc/security# ulimit -Sa | grep "open files"
open files (-n) 49152
root@mysql02:/etc/security# ulimit -Ha | grep "open files"
open files (-n) 65536
そして、ここにmy.cnfの重要なエントリがあります
[mysqld_safe]
open_files_limit = 16384
[mysqld]
open_files_limit = 16384
しかしながら:
root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit | 1024
私たちは完全に立ち往生しています。どんな援助も大歓迎です。
OS: Ubuntu(Debian)の展開
MySQL Serverオプション: open-files-limit
Debianupstartは/ etc/security/limits.confで定義されたパラメーターを使用していないようです。そのため、 service command(したがって、upstartでは)、これらの定義された制限をオーバーライドし、デフォルトの1024を使用します。
解決策は、upstartサービスを定義するmysql.confファイルを変更することです。これは/ etc/init/mysql.confにあり、次の行を追加しますbeforepre-startブロック:
# 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
参照:
Ubuntu 15.10でも同じ問題がありました。
https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 -ソリューションをもたらしました:
(私の場合)そうでない場合、/ lib/systemd/system/mysql.serviceを作成し、このファイルにコンテンツをコピーします https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+ bug/1434758/comments/11 そして、ファイルのどこかに2行を追加します
LimitNOFILE=infinity
LimitMEMLOCK=infinity
1つまたは両方のファイルが存在する場合、この2行が含まれているかどうかを確認します。
LimitNOFILE=infinity
LimitMEMLOCK=infinity
systemctl daemon-reload
...そしてすべてがうまくいくはずです。
上記のどれも私のために問題を解決しなかったので(システムがメモリ不足になるだけです)、私が見つけた解決策は次のとおりです:
/etc/mysql/my.conf
では、MySQLの内部open_files_limitを増やす必要があります。したがって、これを一時的に構成に追加し、MySQLを再起動します。
[mysqld]
open_files_limit = 100000
Sudo /etc/init.d/mysql restart
too many open filesエラーが発生する操作を実行した後、設定をデフォルトに戻し、MySQLを再起動できます。
回避策をありがとう。しかし、私にとっては、この問題は他の2つの事実に隠れています。
InnoDBの問題を修正した後、まだ吐き出していました
mysql> SHOW DATABASES;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 24)
ルートコンソールでmysqldを起動し、手動で再起動する必要がありました
/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --force
その後、サーバーはデータベースの表示を開始しましたが、一部のテーブルにアクセスできませんでした。制限を増やした回避策は、残りの問題を修正しました、ありがとう!