スキップしてコンテンツを表示

Amazon RDS MySQL または MariaDB で mysqldump のエラーを解決する方法を教えてください。

所要時間1分
0

Amazon Relational Database Service (Amazon RDS) で mysqldump を使用してデータをインポートまたはエクスポートするときのエラーをトラブルシューティングしたいと考えています。

解決策

エラーを解決するには、次の解決手順を実行してください。

Couldn't start FLUSH TABLES WITH READ LOCK エラー

mysqpdump を使用して —master-data オプションを使用してデータをエクスポートすると、—master-data オプションは読み取りロック付きのフラッシュテーブルを取得します。これには、Amazon RDS プライマリユーザーにはない SUPER 権限が必要です。Amazon RDS はグローバル読み取りロックをサポートしていません。MySQL が CHANGE MASTER TO コマンドを実行すると、バイナリログファイルの名前と位置が mysqldump ファイルに記録されます。詳細については、MySQL ウェブサイトの ER_ACCESS_DENIED_ERROR を参照してください。

このエラーを解決するには、—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 エラー

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

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

$ mysqldump --max\_allowed\_packet=1G ......

SUPER 権限 と DEFINER エラー

このエラーは、次のうちの 1 つ以上の問題があることを示しています。

接続エラー

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

関連情報

MySQL ウェブサイトのmysqldump

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

コメントはありません

関連するコンテンツ