Express Connect、VPN Gateway、または Smart Access Gateway を介したプライベートネットワーク接続を活用し、Data Transmission Service (DTS) を使用して自己管理 MySQL データベースを ApsaraDB RDS for MySQL インスタンスに移行します。DTS はスキーマ移行、完全なデータ移行、および増分データ移行をサポートしています。この 3 種類の移行を組み合わせることで、移行中もアプリケーションを継続的に稼働させ、最終的な切り替え時のダウンタイムを最小限に抑えることができます。
移行方式の選択
| 目的 | 選択する移行タイプ | 備考 |
|---|---|---|
| メンテナンスウィンドウ内での一括移行 | スキーマ移行 + 完全なデータ移行 | 移行開始前にソースへの書き込みを停止してください。タスクが自動的に完了するまで待機します — 手動で停止しないでください。 |
| ほぼゼロのダウンタイムで切り替える継続的レプリケーション | スキーマ移行 + 完全なデータ移行 + 増分データ移行 | 切り替え準備が整うまで、ソースとターゲットを同期状態に保ちます。ソース側でバイナリロギングが有効化されている必要があります。 |
前提条件
作業を開始する前に、以下の条件を満たしていることを確認してください。
MySQL 5.1、5.5、5.6、5.7、または 8.0 を実行している自己管理 MySQL データベース
Express Connect、VPN Gateway、または Smart Access Gateway を介して Alibaba Cloud に接続されたオンプレミスネットワーク
すべてのソースデータを格納できる十分な空きストレージ容量を備えた ApsaraDB RDS for MySQL または RDS MySQL Serverless インスタンス
必要な権限を持つ自己管理 MySQL データベースのデータベースアカウント(「必要な権限」を参照)
RDS インスタンス用の読み取り/書き込み権限を持つデータベースアカウント
増分データ移行を利用する場合、自己管理 MySQL データベースでバイナリロギングが有効化されていること
設定手順については、以下をご参照ください。
必要な権限
| データベース | スキーマ移行 | 完全なデータ移行 | 増分データ移行 |
|---|---|---|---|
| 自己管理 MySQL | SELECT | SELECT | REPLICATION SLAVE、REPLICATION CLIENT、SHOW VIEW、SELECT |
| ApsaraDB RDS for MySQL | 読み取り/書き込み | 読み取り/書き込み | 読み取り/書き込み |
スキーマ移行中、DTS はビュー、ストアドプロシージャ、および関数の SECURITY 属性を DEFINER から INVOKER に変更します。DTS はユーザーアカウントを移行しません。ターゲット上でビュー、ストアドプロシージャ、または関数を呼び出すには、INVOKER に対して必要な権限を手動で付与してください。
アカウントの作成および権限付与に関する手順については、以下をご参照ください。
自己管理 MySQL: 自己管理 MySQL データベース用アカウントの作成とバイナリロギングの構成
RDS MySQL: ApsaraDB RDS for MySQL インスタンスにアカウントを作成する および アカウントの権限を変更する
課金
| 移行タイプ | タスク構成料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行 + 完全なデータ移行 | 無料 | Alibaba Cloud からインターネット経由でデータを移行する場合のみ課金されます。詳細については、「課金概要」をご参照ください。 |
| 増分データ移行 | 課金対象です。詳細については、「課金概要」をご参照ください。 | — |
制限事項
テーブル構造:テーブルには PRIMARY KEY または一意制約(UNIQUE constraint)が必要であり、すべてのフィールドが一意である必要があります。これを満たさない場合、ターゲットに重複レコードが生成される可能性があります。
FLOAT/DOUBLE の精度:DTS は
ROUND(COLUMN,PRECISION)関数を使用します。精度が指定されていない場合、FLOAT ではデフォルトで 38 桁、DOUBLE では 308 桁が適用されます。移行前に、これらのデフォルト値が要件を満たすか確認してください。ターゲットデータベースの作成: DTS はターゲットデータベースを自動的に作成します。ソースデータベース名が RDS の命名規則に準拠していない場合は、データベースを手動で作成する を移行タスクの設定前に実行してください。
完全移行後の表領域サイズ:完全なデータ移行中の並列 INSERT 操作によりテーブルが断片化され、ターゲットの表領域サイズがソースより大きくなることがあります。必要に応じて、移行後に
OPTIMIZE TABLEを実行してください。タスクの再開:移行タスクが失敗した場合、DTS は自動的に再開します。ワークロードをターゲットに切り替える前に、タスクを停止またはリリースしてください。これを怠ると、再開されたタスクがターゲットのデータを上書きする可能性があります。
パフォーマンスへの影響:完全なデータ移行は、ソースおよびターゲットの両方で読み取り/書き込みリソースを消費します。CPU 使用率が両データベースとも 30 % 未満となる非ピーク時間帯に移行を実行してください。
増分データ移行中にサポートされる SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE、REPLACE |
| DDL | ALTER TABLE、ALTER VIEW、CREATE FUNCTION、CREATE INDEX、CREATE PROCEDURE、CREATE TABLE、CREATE VIEW、DROP INDEX、DROP TABLE、RENAME TABLE、TRUNCATE TABLE |
移行タスクの作成
DTS コンソール にログインします。
データ管理 (DMS) コンソールにリダイレクトされた場合は、
アイコンをクリックして
から DTS コンソールに戻ります。左側のナビゲーションウィンドウで、[データ移行] をクリックします。
[移行タスク] ページの上部で、ターゲット RDS インスタンスが配置されているリージョンを選択します。
右上隅で、[移行タスクの作成] をクリックします。
ソースおよびターゲットデータベースを構成します。
セクション パラメーター 説明 該当なし タスク名 DTS が自動的に名前を生成します。タスクを識別しやすくするために、意味のある名前を指定してください。タスク名は一意である必要はありません。 ソースデータベース インスタンスタイプ Express Connect、VPN Gateway、または Smart Access Gateway 経由で接続されたユーザー作成のデータベース を選択します。 インスタンスリージョン Express Connect、VPN Gateway、または Smart Access Gateway に接続された仮想プライベートクラウド (VPC) のリージョンを選択します。 ピア VPC Express Connect、VPN Gateway、または Smart Access Gateway に接続された VPC を選択します。 データベースタイプ MySQL を選択します。 IP アドレス 自己管理 MySQL データベースにアクセスするためのエンドポイントを入力します。 ポート番号 サービスポートを入力します。デフォルト値は 3306 です。 データベースアカウント 自己管理 MySQL データベースのアカウントを入力します。 データベースパスワード アカウントのパスワードを入力します。パスワードを入力後、接続性のテスト をクリックして接続を確認してください。テストが成功した場合、「成功」と表示されます。失敗した場合は、確認 をクリックして問題を確認・修正してください。 ターゲットデータベース インスタンスタイプ RDS インスタンス を選択します。 インスタンスリージョン RDS インスタンスが配置されているリージョンを選択します。 RDS インスタンス ID RDS インスタンスの ID を選択します。 データベースアカウント RDS インスタンスのアカウントを入力します。 データベースパスワード アカウントのパスワードを入力します。パスワードを入力後、接続性のテスト をクリックして接続を確認してください。 暗号化 非暗号化 または SSL 暗号化 を選択します。SSL 暗号化を利用する場合は、タスクの設定前に RDS インスタンスで SSL を有効化 してください。 
右下隅で、[ホワイトリストの設定と次へ] をクリックします。
警告DTS サーバーの CIDR ブロックをデータベースのホワイトリストまたは ECS セキュリティグループルールに追加すると、セキュリティリスクが発生します。作業を進める前に、強力なパスワードの使用、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期的な監査など、予防措置を講じてください。あるいは、Express Connect、VPN Gateway、または Smart Access Gateway を介してデータベースを DTS に接続することもできます。
移行タイプおよびオブジェクトを選択します。
設定項目 説明 移行タイプの選択 一括移行の場合は、[スキーマ移行] および [完全なデータ移行] を選択します。ほぼゼロのダウンタイムで切り替える場合は、さらに [増分データ移行] も選択します。[増分データ移行] を選択しない場合、完全なデータ移行中はソースへのすべての書き込みを停止して、データ整合性を維持してください。 オブジェクトの選択 [利用可能] セクションで移行する列、テーブル、またはデータベースを選択し、
をクリックして [選択済み] セクションに移動します。デフォルトでは、送信先のオブジェクト名はソースと一致します。オブジェクトの名前を変更するには、オブジェクト名マッピング機能を使用します。オブジェクトの名前を変更すると、依存オブジェクトの移行が失敗する可能性があります。リトライ時間範囲 DTS がソースまたはターゲットとの接続を失った場合、デフォルトで最大 720 分(12 時間)の間リトライを試行します。ご要件に応じて調整してください。リトライ期間内に DTS が再接続できた場合、タスクは自動的に再開されます。リトライ期間中は、DTS インスタンスに対して課金されます。 一時テーブルのコピー(DMS オンライン DDL) Data Management (DMS)ソースで を使用してオンライン DDL 操作を実行する場合、オンライン DDL によって生成された一時テーブルも移行するには [はい] を選択します(移行時間が大幅に延長される可能性があります)。オリジナルの DDL データのみを移行する場合は [いいえ] を選択します(ターゲットのテーブルがロックされる可能性があります)。 
右下隅で、[事前チェック] をクリックします。
DTS は移行開始前に事前チェックを実行します。チェックに合格した場合にのみ、タスクを開始できます。いずれかの項目が不合格となった場合は、横の
アイコンをクリックして詳細を表示してください。問題を修正した後、再度事前チェックを実行するか、ブロッキングでない項目については無視して再チェックを実行してください。タスクが事前チェックに合格した後、[次へ] をクリックします。
[設定の確認] ダイアログボックスで、[チャネル仕様] を指定し、[Data Transmission Service(従量課金)サービス利用規約] を選択します。
[購入して開始] をクリックします。
移行タスクの停止とワークロードの切り替え
スキーマ移行 + 完全なデータ移行のみの場合
タスクが自動的に完了するまで待ちます。手動でタスクを停止しないでください — そうするとターゲットのデータが不完全になる可能性があります。
スキーマ移行 + 完全なデータ移行 + 増分データ移行の場合
増分移行は自動的に停止しません。安全な切り替えのために、以下の手順に従ってください。
進行状況バーに [増分データ移行] および [移行タスクの遅延なし] が表示されるまで待ちます。
ソースデータベースへのすべての書き込みを停止し、数分間待ちます。
進行状況バーに再度 [移行タスクの遅延なし] が表示されるまで待ち、残りの変更がすべて適用されたことを確認します。
手動で移行タスクを停止します。

アプリケーションの接続文字列を更新し、ターゲット RDS インスタンスを指すようにします。
リスクを最小限に抑えるため、非ピーク時間帯またはワークロードの切り替え直前にタスクを停止してください。
移行後のチェックリスト
ワークロードをターゲット RDS インスタンスに切り替えた後、以下の項目を完了してください。
アプリケーション接続性の確認:アプリケーションが RDS インスタンスに正常に接続でき、クエリ結果が期待通りであることを確認します。
ユーザーアカウントおよび権限の再作成:DTS はユーザーアカウントを移行しないため、必要なアカウントをターゲットデータベース上で再作成し、必要な権限を付与してください。
ビュー、ストアドプロシージャ、および関数の確認:DTS は SECURITY 属性を DEFINER から INVOKER に変更します。これらのオブジェクトを呼び出すために、INVOKER に必要な権限を付与してください。
テーブルの最適化(必要に応じて):完全なデータ移行によりテーブルが断片化される場合があります。不要なスペースを解放するために、影響を受けるテーブルに対して
OPTIMIZE TABLEを実行してください。DTS タスクのリリース:移行が完了したことを確認した後、DTS インスタンスを停止およびリリースして、不要な課金を回避してください。