セルフマネージド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にデータを移行する instance.
使用上の注意
移行が完了すると、自己管理型MySQLインスタンスから移行されるすべてのテーブルの名前がRDSインスタンスで小文字になります。 次のいずれかの方法を使用して、ApsaraDB RDS for MySQLのテーブル名の大文字と小文字の区別を確認できます。 インスタンス:
ApsaraDB RDS for MySQLを作成するとき インスタンスで、[テーブル名のケースの機密性] パラメーターを [大文字小文字の区別] に設定します。 詳細については、「ApsaraDB 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サーバーが使用されています。 mysqldumpコマンドは、macOSのターミナルまたはWindowsのコマンドプロンプトで実行することもできます。
mysqldump拡張機能を使用して、自己管理型MySQLインスタンスのデータ、ストアドプロシージャ、トリガー、および関数をエクスポートします。
重要エクスポートタスクが進行中の場合は、データを更新しないでください。 エクスポートタスクが完了するまで待ちます。
次の手順で説明するユーザーには、必要な権限が必要です。 詳細については、「公式MySQLドキュメント」をご参照ください。
Linux CLIで、次のコマンドを実行してデータをファイルとしてエクスポートします。
mysqldump -h 127.0.0.1 -u user -p -- opt -- default-character-set=utf8-- hex-blob <セルフマネージドMySQLインスタンスの名前> -- skip-triggers -- skip-lock-tables > /tmp/<セルフマネージドMySQLインスタンスの名前>.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
Linux CLIで、次のコマンドを実行して、ストアドプロシージャ、トリガー、および関数をファイルとしてエクスポートします。
mysqldump -h 127.0.0.1 -u user -p -- opt -- default-character-set=utf8-- hex-blob <自己管理MySQLインスタンスの名前> -R | sed -e 's/DEFINER[ ]*=[ ]*[^ *]*\*/*/' > /tmp/<自己管理MySQLインスタンスの名前> 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 <RDSインスタンスのエンドポイント> -P <RDSインスタンスのポート> -u <RDSインスタンスアカウント> -p <RDSインスタンスの名前> < /tmp/<セルフマネージドMySQLインスタンスの名前>.sql mysql -h <RDSインスタンスのエンドポイント> -P <RDSインスタンスのポート> -u <RDSインスタンスアカウント> -p <RDSインスタンスの名前> < /tmp/<セルフマネージドMySQLインスタンスの名前> 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
インポートが完了したら、RDSインスタンスにログインし、データが正常かどうかを確認します。 詳細については、「DMSを使用したApsaraDB RDS For MySQLインスタンスへのログイン」をご参照ください。