自己管理の MySQL インスタンスから ApsaraDB RDS for MySQL インスタンスにデータを移行する場合、データ量が比較的小さい場合、またはビジネスで長時間のダウンタイムが許容される場合は、mysqldump 拡張機能を使用できます。 この方法により、データの移行が容易になります。 mysqldump 拡張機能は、自己管理データベースのスキーマとデータの両方をテキストファイルにエクスポートできます。 このファイルには、テーブルの作成とデータの挿入に必要な SQL 文が含まれています。 これにより、データの整合性と一貫性が確保されます。
前提条件
IP アドレスのホワイトリストが構成され、パブリックエンドポイントが取得され、RDS インスタンス用にデータベースとアカウントが作成されています。 詳細については、「ApsaraDB RDS for MySQL を使用する一般的なワークフロー」をご参照ください。
背景情報
ApsaraDB RDS for MySQL は、オープンソースの MySQL と完全に互換性があります。 自己管理の MySQL インスタンスから RDS インスタンスへのデータの移行プロセスは、ある MySQL サーバーから別の MySQL サーバーへのデータの移行プロセスに似ています。
Data Transmission Service (DTS) を使用すると、サービスを中断することなく、より便利で効率的な方法でデータを移行できます。 データの移行には DTS を使用することをお勧めします。 詳細については、「データ移行方法の概要」をご参照ください。
mysqldump 拡張機能のパラメーターの詳細については、「MySQL 公式ドキュメント」をご参照ください。
シナリオ
自己管理の MySQL インスタンスから ApsaraDB RDS for MySQL インスタンスにデータを移行します。
使用上の注意
移行が完了すると、自己管理の MySQL インスタンスから移行されたすべてのテーブルの名前は、RDS インスタンスでは小文字になります。 次の方法のいずれかを使用して、ApsaraDB RDS for MySQL インスタンスのテーブル名の大文字と小文字の区別を確認できます。
RDS for MySQL インスタンスを作成する際に、[テーブル名の大文字と小文字の区別] パラメーターを [大文字と小文字を区別する] に設定します。
既存の RDS インスタンスのテーブル名の大文字と小文字の区別を有効にする場合は、ApsaraDB RDS コンソールで lower_case_table_names パラメーターを 0 に設定します。 詳細については、「ApsaraDB RDS for MySQL インスタンスのパラメーターを変更する」をご参照ください。
警告lower_case_table_names パラメーターを 0 に設定した後、値を 1 に変更しないでください。 このパラメーターの値を 1 に変更すると、
ERROR 1146 (42S02): Table doesn't exist
エラーが報告され、ワークロードに深刻な影響を与える可能性があります。RDS インスタンスで MySQL 8.0 を実行している場合、RDS インスタンスの lower_case_table_names パラメーターを再構成することはできません。
手順
この例では、Linux サーバーを使用しています。 macOS のターミナルまたは Windows のコマンドプロンプトで mysqldump コマンドを実行することもできます。
mysqldump 拡張機能を使用して、自己管理の MySQL インスタンスのデータ、ストアドプロシージャ、トリガー、および関数をエクスポートします。
重要エクスポートタスクの実行中は、データを更新しないでください。 エクスポートタスクが完了するまで待ちます。
以下の手順で説明されているユーザーは、必要な権限を持っている必要があります。 詳細については、「MySQL 公式ドキュメント」をご参照ください。
Linux CLI で、次のコマンドを実行して、データをファイルとしてエクスポートします。
mysqldump -h 127.0.0.1 -u user -p --opt --default-character-set=utf8 --hex-blob <Name of the self-managed MySQL instance> --skip-triggers --skip-lock-tables > /tmp/<Name of the self-managed MySQL instance>.sql
説明mysqldump を使用して RDS for MySQL インスタンスからデータをエクスポートするには、上記のコマンドのデータベースアドレス、ユーザー名、パスワード、およびデータベース名を 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 <Name of the self-managed MySQL instance> -R | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/*/' > /tmp/<Name of the self-managed MySQL instance> 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
説明自己管理の MySQL インスタンスにストアドプロシージャ、トリガー、または関数が含まれていない場合は、この手順をスキップできます。
エクスポートされたファイルを Elastic Compute Service (ECS) インスタンスの指定されたディレクトリにアップロードします。 この例では、ディレクトリは /tmp です。
説明自己管理の MySQL インスタンスが ECS インスタンスにある場合は、この手順をスキップできます。
次のコマンドを実行して、エクスポートされたファイルを RDS インスタンスにインポートします。
mysql -h <Endpoint of the RDS instance> -P <Port of the RDS instance> -u <RDS instance account> -p <Name of the RDS instance> < /tmp/<Name of the self-managed MySQL instance>.sql mysql -h <Endpoint of the RDS instance> -P <Port of the RDS instance > -u <RDS instance account> -p <Name of the RDS instance> < /tmp/<Name of the self-managed MySQL instance> Trigger.sql
説明RDS インスタンスのターゲットデータベースは、作成した既存のデータベースである必要があります。 データベースの作成方法の詳細については、「データベースの管理」をご参照ください。
RDS インスタンスにログインするために使用するアカウントは、特権アカウント、または読み取りと書き込みの権限を持つ標準アカウントである必要があります。
例:
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 を使用して RDS インスタンスにログインし、データが正常かどうかを確認します。