MySQLはサーバーの更新後にファイルを開けません:errno:24


16

Ubuntu: 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ディストリビューション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を完全に削除しました。/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

私たちは完全に立ち往生しています。どんな援助も大歓迎です。


1
Too Many Open Filesに関するエラーの前のログには、どのようなエラーメッセージがありますか?open_files_limitを変更してからmysqldを再起動しましたか?
バート

はい、変更するたびにMySQLを再起動しました。欠落していると報告されているテーブルが1つあります(何らかの理由で):30430 8:36:39 InnoDB:エラー:テーブルを開こうとしましたが、InnoDBはできませんでした:テーブルスペースファイルを開きます './oti_lw_prod/apinvoice_charges .ibd '!
ヴァン

参考までに、ユーザーを他のマスター(デュエルマスターセットアップ)サーバー(01)に移動しましたが、現在まったく同じ症状を示しています。これ(01)は、この障害のあるサーバー(02)とまったく同じ構成であり、この1つ(02)が死んだ場合のフェイルオーバーマスターです。まあ、その計画のためにそんなに。これはOSの問題だと確信しています。
ヴァン

これはオリジナルのポスターでは機能しなかったと思いますが、私にとってはセキュリティ更新後に起こり、mysqlを再起動するだけで十分でした。
クズカイ

回答:


19

OS: Ubuntu(Debian)の展開

MySQLサーバーオプション: open-files-limit

Debianのupstart/etc/security/limits.confで定義されたパラメーターを使用していないようです。したがって、serviceコマンドを使用してmysqlを起動すると(したがって、upstartの下で)、これらの定義された制限がオーバーライドされ、デフォルトの1024が使用されます。

解決策は、変更することです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

参照:


残念なことに、どこかで明確に文書化されていません。:(serverfaultのDavidの投稿にちょうど私たちが起こっ
ヴァン

これはバグではありません、これによると:bugs.launchpad.net/mysql-server/+bug/938669
ヴァン

これは、開いているファイルの増加を引き起こす可能性のあるテーブルにパーティションを追加した後、突然、そして驚くほど明らかになる可能性があります。
markdwhite

これは、Ubuntu 15.10で機能しました。(...私に頭痛と多くの時間を節約してくれてありがとう百万:アップグレードパッケージはすべての私のサイトを破った「開くことができませんファイル」エラーメッセージのトンだ後
エマニュエル

誰もが「事前開始」ブロックとは何かを説明できますか?私はUbuntu 16を実行していますが、この問題が発生していますが、構成ファイルは以前とは異なって見えます
-billynoah

4

Ubuntu 15.10でも同じ問題がありました。

https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758-ソリューションをもたらしました:

  1. /lib/systemd/system/mysql.serviceまたは/lib/systemd/system/mysqld.serviceが存在するかどうかを確認してください
  2. (私の場合)そうでない場合、/ lib / systemd / system / mysql.serviceを作成し、コンテンツをこのファイルにコピーしますhttps://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/ comments / 11、ファイルのどこかに2行追加します

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  3. 1つまたは両方のファイルが存在する場合、この2行が含まれているかどうかを確認します。

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  4. 実行する systemctl daemon-reload

...そしてすべてがうまくいくはずです。


1

上記のどれも私のために問題を解決しなかったので(システムがメモリ不足になるだけです)、私が見つけた解決策は次のとおりです:

では/etc/mysql/my.conf、あなたMySQLsに内部open_files_limitを増やす必要があります。したがって、これを一時的に構成に追加し、MySQLを再起動します。

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

開いているファイル多すぎるというエラーが発生する操作を実行した後、構成をデフォルトに戻し、MySQLを再起動できます。


これはUbuntu 16.04で私のために働いた、ありがとう:)
リチャード・フランク

0

回避策をありがとう。しかし、私にとっては、この問題は他の2つの事実に隠れています。

  1. データディレクトリはデフォルトのインストールとは異なります。さまざまな理由で、歴史的および技術的の両方。
  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

その後、サーバーはデータベースの表示を開始しましたが、一部のテーブルにアクセスできませんでした。制限を増やした回避策は、残りの問題を修正しました、ありがとう!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.