web-dev-qa-db-ja.com

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

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

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

16
Van

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

参照:

19
Van

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

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

4
Hendrik Eggers

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

/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を再起動できます。

1
mniess

回避策をありがとう。しかし、私にとっては、この問題は他の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

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

0
AnrDaemon