mysqldump ユーティリティを使用して、セルフマネージド MySQL インスタンスから ApsaraDB RDS for MySQL へデータを移行できます。この方法は、小規模なデータベース、または長時間のダウンタイムを許容できるシナリオに適しています。このユーティリティは、セルフマネージド データベースからスキーマとデータをテキストファイルにエクスポートします。このファイルには、オブジェクトの作成とデータの挿入を行う SQL ステートメントが含まれており、データ整合性と一貫性が確保されます。
前提条件
ApsaraDB RDS for MySQL インスタンスに対して、IP アドレスホワイトリストの設定、パブリックエンドポイントの申請、データベースとアカウントの作成を完了している必要があります。詳細については、「クイックスタート」をご参照ください。
背景情報
ApsaraDB RDS for MySQL はネイティブ MySQL と完全に互換性があるため、セルフマネージド MySQL インスタンスから ApsaraDB RDS for MySQL インスタンスへのデータ移行は、2 つの MySQL サーバー間でのデータ移行と同様です。
-
より高速なデータ移行とダウンタイムの最小化を実現するには、Data Transmission Service (DTS) のご利用を推奨します。
-
mysqldump パラメーターの詳細については、MySQL 公式ドキュメントをご参照ください。
シナリオ
セルフマネージド MySQL インスタンスから ApsaraDB RDS for MySQL インスタンスへデータを移行します。
使用上の注意
デフォルトでは、セルフマネージド MySQL インスタンスから ApsaraDB RDS へデータベースを移行すると、すべてのテーブル名が小文字に変換されます。ApsaraDB RDS for MySQL インスタンスでテーブル名の大文字と小文字を区別するには、次のいずれかの方法を使用します。
-
ApsaraDB RDS for MySQL インスタンスを作成するか、ApsaraDB RDS for MySQL Serverless インスタンスを作成する場合、[Table Name Case Sensitivity] パラメーターを [Case-sensitive] に設定します。
-
既存のインスタンスの場合は、インスタンスパラメーターを設定 して lower_case_table_names を 0 に設定することで、テーブル名の大文字と小文字を区別できます。
警告-
lower_case_table_names パラメーターを 0 に設定した後は、値を 1 に戻さないでください。値を戻すと、
ERROR 1146 (42S02): Table doesn't existエラーが発生し、サービスが中断される可能性があります。 -
MySQL 8.0 または 8.4 の ApsaraDB RDS for MySQL インスタンスでは、このパラメーターはインスタンス作成時に設定する必要があります。後から変更することはできません。
-
手順
次の手順では、Linux オペレーティングシステムを例として使用します。macOS のターミナルまたは Windows のコマンドプロンプトでも mysqldump コマンドを実行できます。
-
mysqldump を使用して、セルフマネージド MySQL インスタンスからデータ、ストアドプロシージャ、トリガー、関数をエクスポートします。
重要-
エクスポート処理中はデータを更新しないでください。エクスポートが完了するまでお待ちください。
-
次のコマンドで使用するユーザーアカウントには、必要な権限が付与されている必要があります。権限の設定方法の詳細については、「権限の設定」をご参照ください。
-
Linux コマンドラインインターフェイス (CLI) で次のコマンドを実行して、データベースデータをエクスポートします。
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <source_database_name> --skip-triggers --skip-lock-tables > /tmp/<source_database_name>.sql説明ApsaraDB RDS for MySQL インスタンスからデータをエクスポートする場合は、コマンド内のエンドポイント、アカウント、パスワード、データベース名を、お使いの ApsaraDB RDS for MySQL インスタンスの情報に置き換えてください。
例
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 -
Linux CLI で次のコマンドを実行して、ストアドプロシージャ、トリガー、関数をエクスポートします。
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <source_database_name> -R | sed -e 's/DEFINER[ ]*=[ ]*`[^`]*`@`[^`]*`//' > /tmp/<source_database_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 インスタンスにアップロードします。この例では、ファイルは /tmp ディレクトリにアップロードされます。
説明セルフマネージド データベースがすでに ECS インスタンス上にある場合は、この手順をスキップできます。

-
エクスポートしたファイルを移行先の ApsaraDB RDS for MySQL インスタンスにインポートします。
mysql -h <rds_instance_endpoint> -P <rds_instance_port> -u <rds_instance_account> -p <destination_database_name> < /tmp/<source_database_name>.sql mysql -h <rds_instance_endpoint> -P <rds_instance_port> -u <rds_instance_account> -p <destination_database_name> < /tmp/<source_database_name>Trigger.sql説明-
移行先データベースは、ApsaraDB RDS for MySQL インスタンス上に既存のデータベースである必要があります。データベースの作成方法については、「データベース管理」をご参照ください。
-
ApsaraDB RDS for MySQL インスタンスのアカウントは、特権アカウント、または読み取りおよび書き込み権限を持つアカウントである必要があります。
例
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 -
-
インポートが完了したら、DMS を使用して ApsaraDB RDS for MySQL データベースにログインし、インポートされたデータを確認します。