
Ubuntuの場合:12.04 LTS (Linux mysql02 3.2.0-40-generic #64-Ubuntu SMP 月曜日 3月 25日 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux)
マイグレーション:Ubuntu ディストリビューション 5.5.31
装甲:削除されました!
サーバーは 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を完全に削除しました。制限それでもまだ運がない:
# Out of desperation....
* soft nofile 49152
* hard nofile 65536
# No effect!?!!?
#mysql soft nofile 49152
#mysql hard nofile 65536
そして、制限.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
そしてここに重要な項目がありますマイ.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
私たちは完全に困惑し、落ち込んでいます。どんな援助でも大歓迎です。
答え1
OS:Ubuntu (Debian) のデプロイメント
MySQL サーバー オプション:オープンファイル制限
Debianは成り上がり者定義されたパラメータを使用しない制限なので、mysqlを起動するとサービスコマンド (および upstart の場合) では、定義された制限を上書きし、デフォルトの 1024 を使用します。
解決策は、設定ファイルupstartサービスを定義するファイルは、設定ファイルそして次の行を追加します前にの開始前ブロック:
# 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
参考文献:
答え2
Ubuntu 15.10でも同じ問題が発生しました。
参考:- 解決策をもたらしました:
- /lib/systemd/system/mysql.service または /lib/systemd/system/mysqld.service が存在するかどうかを確認します。
(私の場合)そうでない場合は、/lib/systemd/system/mysql.serviceを作成し、その内容をこのファイルにコピーします。https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/comments/11ファイルのどこかに2行追加します
LimitNOFILE=infinity LimitMEMLOCK=infinity
いずれかまたは両方のファイルが存在する場合は、次の 2 行が含まれているかどうかを確認します。
LimitNOFILE=infinity LimitMEMLOCK=infinity
- 実行する
systemctl daemon-reload
...そしてすべてはうまくいくはずです。
答え3
上記のいずれの方法でも問題は解決しませんでした (システムのメモリ不足につながるだけ)。私が見つけた解決策は次のとおりです。
MySQL の内部 open_files_limit を増やす必要があり/etc/mysql/my.conf
ます。そのため、これを一時的に構成に追加し、MySQL を再起動します。
[mysqld]
open_files_limit = 100000
sudo /etc/init.d/mysql restart
操作を実行すると、開いているファイルが多すぎますエラーが発生した場合は、設定をデフォルトに戻して MySQL を再起動してください。
答え4
回避策をありがとうございます。しかし、私にとっては、この問題は他の 2 つの事実によって影が薄くなっています。
- 私のデータ ディレクトリは、デフォルトのインストールとは異なります。歴史的および技術的な複数の理由によります。
- 私は、数多くのバックポートとフォワードポートを経た非常に古いインストールからアップグレードしていました。新しくインストールした MySQL 5.5 の最初の起動時に、InnoDB エンジンはアクティブ化されず (構成ファイルで内部実装が無効にされていましたが、以前のバージョンで使用可能だったプラグインは 5.5 には存在しません)、実際にテーブルをアップグレードせずにアップグレード マークが作成されました。
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
その後、サーバーはデータベースを表示し始めましたが、一部のテーブルにアクセスできませんでした。制限を増やすという回避策により、残りの問題は解決しました。ありがとうございます!