mysqldumpのリソース不足


21

Windowsサーバーでmysqldumpを実行しようとすると、次のエラーメッセージが表示されます

mysqldump: Got error: 23: Out of resources when opening file '.\db\sometable.MYD' (Errcode: 24) when using LOCK TABLES

私が実行しているコマンド次のとおりです。

mysqldump -u user -p"pass" --lock-tables --default-character-set=latin1 -e --quick databasename > "query.sql"

mysqlサービスを再起動しても解決しませんでした。

私は常に同じテーブルのメッセージを受け取ります。

table_cacheおよびmax_connections変数をそれぞれ64から32および30から10に削減しようとしましたが、別のテーブルに対しては今回だけエラーが発生します(これからは、エラーメッセージで常に2番目のテーブルについて言及されます)。

同じスクリプトを同じデータベースを持っている他のWindowsサーバーで問題なく実行しています。

すべてのデータベースには85のテーブルがあります。


MySQLを実行しているオペレーティングシステムは何ですか?
デイビー

どこでもWindows。
フィリップキャリエール

DBにはいくつのテーブルがありますか?何らかのファイル記述子の制限のようです。
デイビー

DB内の85のテーブル。
フィリップキャリエール

説明に追加された情報。
フィリップキャリエール

回答:


21

ここによれば-「OSエラーコード24:開いているファイルが多すぎます」と、より一般的なエラー23「リソース不足」が並んでいます。

そのため、ファイルハンドルが不足しているようです。これは通常、MySQLまたはOS自体のサーバー側の設定/問題です。

おそらく、MySQL自体の--open-files-limit設定を確認/調整し、それが役立つかどうかを確認してください。

誰もがして、DBを使用していないながらも、おそらく、ダンプを実行してみ--single-transaction設定するのではなく--Lock-File、いくつかの人々は、これが(したがって、以下のファイルハンドルを使用して)一度にすべてを開くのではなく、一度に一つのテーブルに動作します示唆として。

それを超えて、おそらくこの特定のサーバーがリソースを使い果たしている理由に関する根本的な原因を見つける必要があります。おそらく、可能な限り多くのサービス/プロセスを無効にして、ダンプが通過するかどうかを確認することによるトラブルシューティングが含まれます。次に、そこから、誰が多くのリソースを消費し、おそらくそれらを正しく解放していないのかを把握します。


2
--lock-tablesの代わりに--single-transactionが機能しました。どうもありがとう。
フィリップキャリエール

奇妙なことに、私はInnoDBを使用していませんが、このパラメーターなしでは機能しません。-シングルトランザクションはinnoDBにのみ関連すると考えました。
フィリップキャリアー

いいね :)それは助けてくれてうれしい。
techie007

4
--lock-all-tablesこれも機能し、--single-transactionInnoDB以外のテーブルで作業する場合のような矛盾の問題はありません。
-Freiheit

ただ、明確にする:--single-transaction力を--lock-tables=off。非トランザクションテーブルではこれを使用しないでください。
b2ag

6

たとえば、テーブルがInnoDBであり、クラスターテーブルを使用しておらず、ALTER TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLEはダンプ中に発生しないなど、--single-transaction代わりに試してみること--lock-tablesはできますか?MySQLサポート組織がある場合は、これが問題ないことを確認してください。

私はこれをunixでしか試しませんでしたが、基本的に2000テーブルのDBで試すと、あなたのものと同様のエラーで失敗します。たとえば、開いているファイルハンドルをすべて使用しました。


+1。あなたの解決策はtechie007と同じでしたが、彼は最初に答えたので、彼の答えを受け入れます。レコードについては、innoDBを使用していません。
フィリップキャリアー

2

次のエラーが表示される場合があります。

MySQL:Errcode:LOCK TABLESを使用する場合は24

... MySQL 5.5にアップグレードし、Pleskまたは実行中の他のOSでバックアップを実行しているときの他のエラーとともにmysqldump

修正するには:

  1. 編集 my.cnf
  2. 追加:

    open_files_limit=2048
    
  3. MySQLを再起動します

受け取っている場合:

mysql.procからロードできません。テーブルが壊れている可能性があります(1548)

これは、5.5へのアップグレードの結果です。実行:

mysql_upgrade --force

CentOS 6.7およびPlesk 12でテストおよび動作しました。


0

フィリップと同じような問題がありました。ダンプを開始すると、次のようなエラーが表示されました。

mysqldump: Got error: 23: Out of resources when opening file './c1baznarz/timecard.MYD' (Errcode: 24) when using LOCK TABLES

私は簡単なコマンドを使用しました:

mysqldump -uroot -p c1baznarz > c1baznarz.sql

そこで、mysqldumpに別のコマンドを追加します。

--single-transaction

ダンプの準備ができました。したがって、私のすべてのmysqldumpクエリは次のようになります。

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