mysqldump のリソース不足

mysqldump のリソース不足

私は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 サービスを再起動しても効果はありませんでした。

いつも同じテーブルに関するメッセージが表示されます。

私は減らしてみましたテーブルキャッシュそして最大接続数変数をそれぞれ 64 から 32 と 30 から 10 に変更しましたが、今度は別のテーブルに対してのみエラーが発生します (今後は、エラー メッセージには常に 2 番目のテーブルが記載されます)。

同じスクリプトが他の12のウィンドウズ問題なく同じデータベースを持つサーバー。

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

答え1

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

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

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

また、他の誰もDBを使用していないときに、--single-transaction設定の代わりに--Lock-File、何人かの人が提案しているように、これにより、一度にすべてのテーブルを開くのではなく、一度に 1 つのテーブルが処理されます (したがって、ファイル ハンドルの使用が少なくなります)。

それ以上に、この特定のサーバーでリソースが不足している根本的な原因を見つける必要があるでしょう。それには、できるだけ多くのサービス/プロセスを無効にして、ダンプが成功するかどうか確認するトラブルシューティングが必要になるでしょう。そして、そこから、リソースを大量に消費し、おそらくリソースを適切に解放していない犯人が誰なのかを突き止めます。

答え2

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

私はこれを UNIX でのみ試しましたが、基本的に 2000 個のテーブルを持つ DB で試すと、開いているファイル ハンドルをすべて使用したなどの、あなたと同様のエラーで失敗します。

答え3

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

MySQL: 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 でテストされ、動作しました。

答え4

私も Philipe と同様の問題を抱えていました。ダンプを開始すると、次のようなエラーが表示されました。

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

関連情報