すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:mysqldump を使用した MySQL データの移行

最終更新日:Mar 29, 2026

mysqldump は、データベースのスキーマとデータを CREATE TABLE 文と INSERT 文を含む SQL ファイルとしてエクスポートし、そのファイルをターゲットインスタンスで再生します。この方法は、データ量が少ない場合や、移行中の長時間のダウンタイムを許容できるビジネスに適しています。

サービスを中断せずに移行するには、代わりに Data Transmission Service (DTS) を使用してください。DTS は、継続的なレプリケーションと最小限のダウンタイムでの切り替えをサポートしています。

前提条件

開始する前に、以下を確認してください。

  • RDS インスタンスの IP アドレスホワイトリストが設定されていること

  • RDS インスタンスのパブリックエンドポイントが取得されていること

  • RDS インスタンスにターゲットデータベースとアカウントが作成されていること

設定手順については、「ApsaraDB RDS for MySQL を使用するための一般的なワークフロー」をご参照ください。

ユースケース

mysqldump は、次のような場合に適しています。

  • データ量が少ない — エクスポートとインポートがメンテナンスウィンドウ内に完了する場合

  • ダウンタイムが許容できる — 一貫性を保証するために、エクスポート中はソースデータベースへの書き込みを停止する必要がある場合

  • 継続的なレプリケーションが不要 — 1 回限りの論理コピーで十分な場合

ゼロダウンタイムでの切り替えや継続的なレプリケーションが必要な場合は、代わりに DTS をご使用ください。

注意事項

移行後、セルフマネージド MySQL インスタンスのすべてのテーブル名は、RDS インスタンス上で小文字で保存されます。大文字と小文字を区別するテーブル名を保持するには、次のいずれかの方法を使用します。

警告

lower_case_table_names0 に設定した後は、1 に戻さないでください。`1` に戻すと、ERROR 1146 (42S02): Table doesn't exist エラーが発生し、ワークロードに深刻な影響を与える可能性があります。ご利用の RDS インスタンスが MySQL 8.0 を実行している場合、インスタンス作成後に lower_case_table_names を再設定することはできません。

mysqldump を使用したデータ移行

以下の手順では Linux 環境を使用します。同じコマンドは macOS のターミナルや Windows のコマンドプロンプトでも動作します。

ステップ 1:セルフマネージド MySQL インスタンスからのデータのエクスポート

重要

エクスポートを実行する前に、ソースデータベースへのすべての書き込みを停止してください。エクスポート中にデータを更新すると、ダンプファイルが破損する可能性があります。

エクスポートに使用するアカウントには、必要な権限が必要です。詳細については、MySQL 公式ドキュメントをご参照ください。

スキーマとデータのエクスポート (ストアドプロシージャ、トリガー、関数を除く):

mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <db_name> --skip-triggers --skip-lock-tables > /tmp/<db_name>.sql

例:

mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob testdb --skip-triggers --skip-lock-tables > /tmp/testdb.sql
代わりに ApsaraDB RDS for MySQL インスタンスからデータをエクスポートするには、ホスト、ユーザー名、データベース名を対応する RDS の値に置き換えてください。
--default-character-set=utf8 フラグは、ダンプファイルの文字セットを設定します。ソースデータベースが異なる文字セットを使用している場合は、このフラグをそれに合わせて設定してください。ダンプファイルの文字セットとターゲットインスタンスの文字セットが一致しない場合、インポート後に文字化けが発生します。

ストアドプロシージャ、トリガー、関数のエクスポート:

mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <db_name> -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/*/' > /tmp/<db_name>Trigger.sql

例:

mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob testdb -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > /tmp/testdbTrigger.sql
ソースデータベースにストアドプロシージャ、トリガー、または関数がない場合は、このコマンドをスキップしてください。

ステップ 2:エクスポートしたファイルの ECS インスタンスへのアップロード

ステップ 1 の .sql ファイルを、RDS インスタンスにアクセスできる Elastic Compute Service (ECS) インスタンスの /tmp ディレクトリにアップロードします。

result
セルフマネージド MySQL インスタンスがすでに ECS インスタンス上で実行されている場合は、このステップをスキップしてください。

ステップ 3:RDS インスタンスへのファイルのインポート

ECS インスタンスで次のコマンドを実行します。プレースホルダーをご利用の RDS 接続詳細に置き換えてください。

mysql -h <RDS endpoint> -P <port> -u <account> -p <database> < /tmp/<db_name>.sql
mysql -h <RDS endpoint> -P <port> -u <account> -p <database> < /tmp/<db_name>Trigger.sql

例:

mysql -h rm-bpxxxxx.mysql.rds.aliyuncs.com -P 3306 -u testuser -p testdb < /tmp/testdb.sql
mysql -h rm-bpxxxxx.mysql.rds.aliyuncs.com -P 3306 -u testuser -p testdb < /tmp/testdbTrigger.sql
プレースホルダー説明
<RDS endpoint>RDS インスタンスのパブリックエンドポイントrm-bpxxxxx.mysql.rds.aliyuncs.com
<port>RDS インスタンスのポート3306
<account>RDS アカウント (特権アカウント、または読み取りおよび書き込み権限を持つ標準アカウント)testuser
<database>ターゲットデータベース名 — RDS インスタンス上にすでに存在している必要がありますtestdb

ターゲットデータベースがまだ存在しない場合に作成するには、「データベースの管理」をご参照ください。

ステップ 4:移行の検証

DMS を使用して RDS インスタンスにログインし、テーブル、行数、およびデータが正しいことを確認します。

次のステップ