12
mysqldump: Couldn't execute 'show fields from `tablename`': Out of resources when opening file './databasename/tablename#P#p125.MYD' (Errcode: 24) (23)

シェルでエラー24を確認すると、

>>perror 24

OS error code  24:  Too many open files

どうすればこれを解決できますか?

4

7 に答える 7

20

最初に、特定のユーザーまたはグループの制限を特定するには、次のことを行う必要があります。

root@ubuntu:~# sudo -u mysql bash
mysql@ubuntu:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 71680
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 71680
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
mysql@ubuntu:~$

重要な行は次のとおりです。

ファイルを開く (-n) 1024

ご覧のとおり、オペレーティング システム ベンダーは、このバージョンを基本的な Linux 構成 (プロセスあたり 1024 ファイル) で出荷しています。

これは明らかに、忙しい MySQL インストールには十分ではありません。

これを修正するには、次のファイルを変更する必要があります。

/etc/security/limits.conf

mysql             soft    nofile           24000
mysql             hard    nofile           32000

Linux の一部のフレーバーでは、これをデーモン プロセスとログイン セッションに固定するために追加の構成が必要になります。たとえば、Ubuntu 10.04 では、次の行を に追加して、pam セッションの制限も設定する必要があります/etc/pam.d/common-session

session required pam_limits.so
于 2009-08-26T09:28:02.737 に答える
8

かなり古い質問ですが、ここに私の 2 セントがあります。

発生している可能性があるのは、mysql エンジンがその変数「open-files-limit」を正しく設定していないことです。

mysql が mysql> SHOW VARIABLES; を開くことを許可しているファイルの数を確認できます。

制限をすでに高い値に設定している場合でも、おそらく 1024 に設定されています。

オプション --open-files-limit=XXXXX を mysqld のコマンド ラインで使用できます。

乾杯

于 2011-02-16T10:54:51.687 に答える
3

mysqldumpコマンドに--single_transactionを追加します

于 2009-08-10T15:52:18.363 に答える
1

また、テーブルにアクセスする一部のコードによってテーブルが適切に閉じられず、ある時点で開いているファイルの数に達する可能性もあります。

考えられる理由については、 http://dev.mysql.com/doc/refman/5.0/en/table-cache.htmlも参照してください。

mysql を再起動すると、この問題は解消されます (ただし、根本的な問題が修正されない限り、再び発生する可能性があります)。

于 2009-02-02T09:02:05.447 に答える
1

/etc/security/limits.conf を編集して、OS の制限を増やすことができます。

" lsof " (LiSt Open Files) コマンドをインストールして、ファイル <-> プロセスの関係を確認することもできます。

于 2009-02-02T10:55:53.423 に答える
1

私が思うに、PAM を構成する必要はありません。私のシステム (Debian 7.2 と Percona 5.5.31-rel30.3-520.squeeze ) では、次のものがあります。

my.cnf 変更前:

\#cat /proc/12345/limits |grep "open files"
Max open files            1186                 1186                 files

「open_files_limit = 4096」を my.cnf に追加して mysqld を再起動すると、次のようになりました。

\#cat /proc/23456/limits |grep "open files"
Max open files            4096                 4096                 files

もちろん、12345 と 23456 は mysqld プロセスの PID です。

「open_files_limit」のような変数を表示すると、4096 が表示されるようになりました。

「ulimit」は変更を表示しませんが、すべて問題ないように見えます。

\# su - mysql -c bash
\# ulimit -n
1024
于 2013-10-20T15:07:30.527 に答える
0

「24」が OS レベルのエラー番号であるという保証はありません。そのため、開いているファイル ハンドルが多すぎることを意味するとは考えないでください。これは、mysql 自体で使用される何らかのタイプの内部エラー コードである可能性があります。これについては、mysql メーリング リストで質問することをお勧めします。

于 2009-02-02T08:36:04.407 に答える