MySQL または MariaDB の Amazon RDS で mysqldump を使用するときに受け取ったエラーを解決するにはどうすればよいですか?

所要時間2分
0

MySQL または MariaDB を実行している Amazon Relational Database Service (Amazon RDS) DB インスタンスを使用しています。mysqldump を使用してデータをインポートまたはエクスポートしていますが、エラーが表示されます。このエラーをトラブルシューティングして解決するにはどうすればよいですか?

簡単な説明

mysqldump を使用すると、次のエラーが表示されることがあります:

  • 「FLUSH TABLES WITH READ LOCK」を実行できませんでしたというエラー
  • Max_allowed_packet エラー
  • SUPER 権限 と DEFINER エラー
  • 接続の切断または中断エラー

解決策

「FLUSH TABLES WITH READ LOCK」を実行できませんでしたというエラー

mysqldump で --master-data オプションを使用してデータをエクスポートすると、次のようなエラーが表示される場合があります:

「mysqldump: 'FLUSH TABLES WITH READ LOCK' を実行できませんでした: 'user'@'%' のアクセスが拒否されました (パスワード使用: はい) (1045)」

--master-data オプションは FLUSH TABLES WITH READ LOCK を取得します。これには Amazon RDS マスターユーザーにはない SUPER 権限が必要であり、Amazon RDS は GLOBAL READ LOCK をサポートしていません。MySQL が **CHANGE MASTER TO ** ステートメントを実行してログ情報を取得すると、バイナリログファイルの名前と位置 (座標) が mysqldump ファイルに記録されます。詳細については、ER_ACCESS_DENIED_ERROR に関する MySQL ドキュメントを参照してください。

このエラーを解決するには、--master-data オプションを削除します。このオプションを削除すると、mysqldump の正確なログ位置を得ることができません。この問題を回避するには、アプリケーションが停止しているときに mysqldump を取得するか、Amazon RDS リードレプリカから mysqldump を取得します。これにより、SHOW SLAVE STATUS を実行して正確なログ位置を取得できます。レプリカを停止すると、バイナリログの位置が変更されないことが確認されるためです。以下の手順に従って、この RDS DB インスタンスの Amazon RDS MySQL リードレプリカから mysqldump を作成します。

1.    バイナリログ保有期間の値を設定します。

2.    リードレプリカで次のコマンドを実行してレプリケーションを停止します:

CALL mysql.rds_stop_replication;

3.    リードレプリカから --master-data=2 を指定せずに mysqldump を取得します。

4.    レプリカで SHOW SLAVE STATUS を実行し、Master_Log_FileExec_Master_Log_Pos を取得します。

5.    アプリケーションにレプリカを使用している場合は、次のストアドプロシージャを使用してレプリケーションを再開します:

CALL mysql.rds_start_replication;

アプリケーションにレプリカを使用していない場合は、削除できます。

Max_allowed_packet エラー

mysqldump を使用してデータをエクスポートすると、次のようなエラーが表示される場合があります:

「エラー 2020: XX 行のテーブル tb_name のダンプ中に 'max_allowed_packet' バイトより大きいパケットを取得しました 」

このエラーは、mysqldump コマンドが RDS DB インスタンスに設定されている max_allowed_packet パラメータの値よりも大きいパケットを要求した場合に発生します。詳細については、MySQL ドキュメントの「Packet too large」を参照してください。

max_allowed_packet エラーを解決するには、max_allowed_packet のグローバル値を増やすか、mysqldump でそのセッションの max_allowed_packet を (データベース全体でグローバルに設定するのではなく) 設定します。たとえば、以下のようにコマンドを変更できます:

$ mysqldump --max_allowed_packet=1G ......

SUPER 権限 と DEFINER エラー

mysqldump を使用して MySQL または MariaDB を実行している RDS DB インスタンスにデータをインポートすると、次のようなエラーが表示されることがあります:

「エラー 1227 (42000) XX 行: アクセスが拒否されました; この操作には (少なくとも 1 つ以上の) SUPER 権限が必要です」

このエラーは、次の問題のうちの 1 つ以上を示しています:

接続の切断または中断エラー

mysqldump を使用してデータをインポートすると、次のようなエラーが表示される場合があります:

「mysqldump: エラー 2013: テーブルをダンプしてクエリを実行しているときに mysql サーバーへの接続が切断されました」

または

「mysqldump: mysqldump: db への接続 XXXXXX の中断: 'db_name' ユーザー: 'master_user' ホスト: 'XXXXXXX' (通信パケットの書き込みタイムアウト)」

このエラーの原因と解決方法の詳細については、「Amazon RDS MySQL DB インスタンスへの接続時に発生する「MySQL server has gone away」エラーの解決方法を教えてください。」を参照してください。


関連情報

mysqldumpのためのMySQLドキュメンテーション

Amazon RDS for MySQL DB インスタンスの関数、プロシージャ、トリガーを有効にするにはどうすればよいですか?

コメントはありません

関連するコンテンツ