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
どうすればこれを解決できますか?
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
どうすればこれを解決できますか?
最初に、特定のユーザーまたはグループの制限を特定するには、次のことを行う必要があります。
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
かなり古い質問ですが、ここに私の 2 セントがあります。
発生している可能性があるのは、mysql エンジンがその変数「open-files-limit」を正しく設定していないことです。
mysql が mysql> SHOW VARIABLES; を開くことを許可しているファイルの数を確認できます。
制限をすでに高い値に設定している場合でも、おそらく 1024 に設定されています。
オプション --open-files-limit=XXXXX を mysqld のコマンド ラインで使用できます。
乾杯
mysqldumpコマンドに--single_transactionを追加します
また、テーブルにアクセスする一部のコードによってテーブルが適切に閉じられず、ある時点で開いているファイルの数に達する可能性もあります。
考えられる理由については、 http://dev.mysql.com/doc/refman/5.0/en/table-cache.htmlも参照してください。
mysql を再起動すると、この問題は解消されます (ただし、根本的な問題が修正されない限り、再び発生する可能性があります)。
/etc/security/limits.conf を編集して、OS の制限を増やすことができます。
" lsof " (LiSt Open Files) コマンドをインストールして、ファイル <-> プロセスの関係を確認することもできます。
私が思うに、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
「24」が OS レベルのエラー番号であるという保証はありません。そのため、開いているファイル ハンドルが多すぎることを意味するとは考えないでください。これは、mysql 自体で使用される何らかのタイプの内部エラー コードである可能性があります。これについては、mysql メーリング リストで質問することをお勧めします。