Data Transmission Service (DTS) は、スキーマ移行、完全なデータ移行、および増分データ移行を組み合わせることで、ダウンタイムを最小限に抑えながら、PolarDB for MySQL クラスターから ApsaraDB RDS for MySQL インスタンスへデータを移行します。
自己管理 MySQL データベース(パブリック IP、Elastic Compute Service (ECS) 上でホスト、Express Connect、VPN Gateway、または Smart Access Gateway 経由での接続、または Database Gateway 経由での接続)への移行にも、同様の手順が適用されます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ソースとなる PolarDB for MySQL クラスター。詳細については、「従量課金クラスターの購入」または「サブスクリプションクラスターの購入」をご参照ください。
ターゲットとなる ApsaraDB RDS for MySQL インスタンスの利用可能なストレージ容量が、ソースクラスターの全データサイズより大きいこと
必要な権限を持つデータベースアカウント(「必要な権限」をご参照ください)
増分データ移行には、ソース クラスターでバイナリロギングが有効であり、
loose_polar_log_binがonに設定されている必要があります。「バイナリロギングを有効にする」および「パラメーターの変更」をご参照ください。
移行タイプ
要件に応じて、以下のいずれかの組み合わせを選択してください。
| 組み合わせ | 使用タイミング | ダウンタイムが必要 |
|---|---|---|
| スキーマ移行 + 完全なデータ移行 | ソースをオフラインにできる場合のワンタイム移行 | はい |
| スキーマ移行 + 完全なデータ移行 + 増分データ移行 | サービス中断を最小限に抑えたライブ移行 | なし |
スキーマ移行では、選択したオブジェクト(テーブル、ビュー、トリガー、ストアドプロシージャ、ストアドファンクション)のスキーマをソースからターゲットへコピーします。DTS は、ビュー、ストアドプロシージャ、ストアドファンクションの SECURITY 属性を DEFINER から INVOKER に変更します。ユーザー情報は移行されません。INVOKER に対しては、別途読み取りおよび書き込み権限を付与してください。
完全なデータ移行では、選択したオブジェクトの既存データをコピーします。
増分データ移行では、完全なデータ移行完了後に、ソースからの変更を継続的にレプリケートします。
課金
| 移行タイプ | インスタンス構成料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行 + 完全なデータ移行 | 無料 | 課金概要データをインターネット経由で移行する場合のみ課金されます。詳細については、「」をご参照ください。 |
| 増分データ移行 | 課金済み。「課金概要」を参照してください。 | データをインターネット経由で移行する場合のみ課金されます。 |
必要な権限
移行タスクの構成を行う前に、DTS で使用するデータベースアカウントに以下の権限を付与してください。
| データベース | 必要な権限 | 参考情報 |
|---|---|---|
| PolarDB for MySQL クラスター | 移行対象オブジェクトに対する読み取り権限 | データベースアカウントの作成と管理 |
| ApsaraDB RDS for MySQL インスタンス | 移行対象オブジェクトに対する読み取りおよび書き込み権限 | アカウントの作成 |
制限事項
ソースデータベース
テーブルには PRIMARY KEY または一意制約(すべてのフィールドが一意)が必要です。該当しない場合、ターゲットデータベースに重複レコードが生成される可能性があります。
テーブルを移行対象として選択し、ターゲットでテーブル名またはカラム名を変更する必要がある場合、1 つのタスクでサポートされる最大テーブル数は 1,000 です。1,000 を超える場合は、複数のタスクを構成するか、代わりにデータベース単位での移行を実施してください。
スキーマ移行または完全なデータ移行中に、データベースまたはテーブルのスキーマを変更する DDL 操作を実行しないでください。
増分移行を含まない完全なデータ移行(フルオンリー)中は、ソースデータベースへの書き込みを行わないでください。データの不整合を回避するため、タスクには必ず増分データ移行を含めてください。
ソースサーバーには十分なアウトバウンド帯域幅が必要です。不足していると、移行速度が低下します。
ソースクラスターの読み取り専用ノードは移行できません。
増分移行におけるバイナリログの保持期間
PolarDB for MySQL クラスターでバイナリロギングを有効化すると、バイナリログファイルのストレージ料金が発生します。
移行タイプに応じて、バイナリログの保存期間を設定してください。
| 移行タイプ | 最低保持期間 |
|---|---|
| 増分データ移行のみ | 24 時間を超えること |
| 完全なデータ移行 + 増分データ移行 | 最低 7 日間 |
DTS がバイナリログを取得できない場合(保持期間が短すぎるなど)、タスクは失敗します。例外的なケースでは、データの不整合や損失が発生する可能性があります。完全なデータ移行完了後は、保持期間を 24 時間を超えるように短縮できます。
上記の最低保持期間を下回る設定は、DTS のサービスレベルアグリーメント(SLA)の対象外となります。
外部キーの動作
DTS は、スキーマ移行時に外部キーを移行します。
完全および増分データ移行中、DTS はセッションレベルで外部キー制約チェックおよびカスケード操作を無効化します。移行中にソースでカスケード操作または削除操作を実行すると、データの不整合が発生する可能性があります。
データ型の精度
DTS は、FLOAT および DOUBLE カラムの値を ROUND(COLUMN,PRECISION) を使用して取得します。精度が指定されていない場合、FLOAT には 38 桁、DOUBLE には 308 桁がデフォルトで使用されます。移行を開始する前に、これらのデフォルト値が要件を満たすことを確認してください。
ターゲットデータベースの作成
DTS は、ApsaraDB RDS for MySQL インスタンス内にターゲットデータベースを自動的に作成します。ソースデータベース名が無効な場合は、タスクの構成前に手動でデータベースを作成してください。詳細については、「データベースの管理」をご参照ください。
増分移行でサポートされる SQL 操作
| 操作タイプ | サポートされる文 |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | ALTER TABLE、ALTER VIEW、CREATE FUNCTION、CREATE INDEX、CREATE PROCEDURE、CREATE TABLE、CREATE VIEW、DROP INDEX、DROP TABLE、RENAME TABLE、TRUNCATE TABLE |
RENAME TABLE 操作により、データの不整合が発生する可能性があります。テーブルを移行対象として選択し、移行中にそのテーブル名を変更した場合、DTS はそのテーブルのデータを移行しません。これを回避するには、個別のテーブルではなくデータベース全体を移行対象として選択し、リネーム前およびリネーム後のデータベース名が両方とも選択されたオブジェクトに含まれていることを確認してください。
移行タスクの構成
ステップ 1:データ移行タスクページへ移動
Data Management (DMS) コンソール にログインします。
トップナビゲーションバーで、DTS をクリックします。
左側ナビゲーションウィンドウで、DTS (DTS) > データ移行 を選択します。
また、新しい DTS コンソールのデータ移行タスクページに直接アクセスすることもできます。ナビゲーションオプションは、使用している DMS コンソールのモードおよびレイアウトによって異なる場合があります。「シンプルモード」と「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
ステップ 2:タスクの作成
データ移行タスク の横にあるドロップダウンリストから、データ移行インスタンスが配置されているリージョンを選択します。
説明新しい DTS コンソールでは、左上隅からリージョンを選択します。
タスクの作成 をクリックします。
(任意)右上隅で、新規構成ページ をクリックして、新しい構成ページに切り替えます。
説明前のバージョンに戻る が表示されている場合は、このステップをスキップしてください。新しい構成ページの使用を推奨します。
ステップ 3:ソースおよびターゲットデータベースの構成
ソースおよびターゲットデータベースの構成後は、次に進む前にページ上部に表示される 制限事項 を必ずご確認ください。
以下のパラメーターを構成します。
タスク情報
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS が自動的に名前を割り当てます。タスクを識別しやすいように、意味のある名前を指定してください。名前は一意である必要はありません。 |
ソースデータベース
| パラメーター | 値 |
|---|---|
| DMS データベースインスタンスの選択 | 登録済みの既存インスタンスを選択するか、ソースデータベースのパラメーターを手動で構成してください。 |
| データベースタイプ | PolarDB for MySQL |
| アクセス方法 | Alibaba Cloud インスタンス |
| インスタンスリージョン | ソース PolarDB for MySQL クラスターが配置されているリージョン。 |
| Alibaba Cloud アカウント間でのデータ複製 | いいえ(本例では現在のアカウントを使用) |
| PolarDB クラスター ID | ソース PolarDB for MySQL クラスターの ID。 |
| データベースアカウント | 移行対象オブジェクトに対する読み取り権限を持つアカウント。 |
| データベースパスワード | データベースアカウントのパスワード。 |
| 暗号化 | セキュリティ要件に基づいて設定してください。「SSL 暗号化の設定」をご参照ください。 |
宛先データベース
| パラメーター | 値 |
|---|---|
| DMS データベースインスタンスの選択 | 登録済みの既存インスタンスを選択するか、ターゲットデータベースのパラメーターを手動で構成してください。 |
| データベースタイプ | MySQL |
| アクセス方法 | Alibaba Cloud インスタンス |
| インスタンスリージョン | ターゲット ApsaraDB RDS for MySQL インスタンスが配置されているリージョン。 |
| Alibaba Cloud アカウント間でのデータ複製 | いいえ(本例では現在のアカウントを使用) |
| RDS インスタンス ID | ターゲット ApsaraDB RDS for MySQL インスタンスの ID。 |
| データベースアカウント | 移行対象オブジェクトに対する読み取りおよび書き込み権限を持つアカウント。 |
| データベースパスワード | データベースアカウントのパスワード。 |
| 暗号化 | 暗号化なし または SSL 暗号化 を選択します。SSL 暗号化を選択した場合は、タスクを開始する前に RDS インスタンスの SSL 暗号化を有効化してください。詳細については、「SSL 暗号化機能の設定」をご参照ください。 |
DMS でデータベースを登録するには、DMS コンソールで [テンプレートの作成] をクリックします。「Alibaba Cloud データベースインスタンスを登録する」または「サードパーティのクラウドサービスでホストされているデータベースまたは自己管理データベースを登録する」をご参照ください。DTS コンソールでは、[データベース接続] ページまたは新しい構成ページでデータベースを登録します。「データベース接続を管理する」をご参照ください。
ステップ 4:接続性のテスト
接続性のテストと続行 をクリックします。
DTS は、DTS サーバーの CIDR ブロックを、Alibaba Cloud データベースインスタンスの IP アドレスホワイトリストと、ECS でホストされているデータベースのセキュリティグループルールに自動的に追加します。 ソースデータベースまたはターゲットデータベースが複数の ECS インスタンスでホストされている場合、各 ECS インスタンスのセキュリティグループルールに DTS サーバーの CIDR ブロックを手動で追加する必要があります。 データセンターまたはサードパーティのクラウドサービス内の自己管理データベースの場合、DTS サーバーの CIDR ブロックをデータベースの IP アドレスホワイトリストに手動で追加してください。 詳細については、「DTS サーバーの CIDR ブロック」をご参照ください。
DTS サーバーの CIDR ブロックをホワイトリストまたはセキュリティグループルールに追加すると、セキュリティリスクが発生します。続行する前に、アカウント認証情報の強化、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期監査などの予防措置を講じてください。あるいは、Express Connect、VPN Gateway、Smart Access Gateway を使用して、データベースを DTS に接続することもできます。
ステップ 5:オブジェクトの選択と移行設定の構成
オブジェクトの選択 ページで、以下のパラメーターを構成します。
| パラメーター | 説明 |
|---|---|
| 移行タイプ | ワンタイム移行の場合は、スキーマ移行 および 完全なデータ移行 を選択します。移行中にソースを稼働させ続ける場合は、3 つのタイプすべて(増分データ移行 を含む)を選択します。 |
| ソースデータベース内のトリガーの移行方法 | これは、スキーマ移行 および 増分データ移行 の両方が選択されている場合にのみ利用可能です。詳細については、「ソースデータベースからのトリガーの同期または移行」をご参照ください。 |
| 競合するテーブルの処理モード | 事前チェックおよびエラー報告(デフォルト):両方のデータベースに同一名称のテーブルが存在する場合、事前チェックが失敗します。エラーを無視して続行:このチェックをスキップします。注意:ソースとターゲットのスキーマが異なる場合、データの不整合が発生する可能性があります。 |
| ターゲットインスタンスにおけるオブジェクト名の大文字小文字 | デフォルト: [DTS デフォルトポリシー]。詳細については、「宛先インスタンスでのオブジェクト名の大文字小文字の指定」をご参照ください。 |
| ソースオブジェクト | オブジェクトを選択し、 |
| 選択済みオブジェクト | オブジェクトを右クリックして、名前を変更するかフィルター条件を設定します。[一括編集] をクリックして、複数のオブジェクトを一度に名前を変更します。「オブジェクト名のマップ」をご参照ください。注意:オブジェクトの名前を変更すると、依存オブジェクトが移行に失敗する場合があります。 |
次へ:高度な設定 をクリックし、以下の項目を構成します。
| パラメーター | 説明 |
|---|---|
| タスクのスケジュールに使用する専用クラスターを選択 | DTS 専用クラスターとはデフォルト値:共有クラスター。より高い移行安定性を実現するには、専用クラスターをご購入ください。詳細については、「」をご参照ください。 |
| Online DDL ツールの一時テーブルをコピー | DTS が Online DDL ツール(Data Management (DMS) または gh-ost)から生成された一時テーブルをどのように処理するかを制御します。はいアラート通知設定:一時テーブルのデータを移行します(遅延が発生する場合があります)。いいえ、DMS Online DDL に準拠:DTS は Online DDL 操作によって生成された一時テーブルのデータを移行しません。DMS を使用して実行された元の DDL 操作のみを移行します。 説明 「いいえ、DMS Online DDL に準拠」を選択した場合、ターゲットデータベース内のテーブルがロックされる可能性があります。いいえ、gh-ost に準拠:DTS は Online DDL 操作によって生成された一時テーブルのデータを移行しません。gh-ost ツールを使用して実行された元の DDL 操作のみを移行します。 説明 「いいえ、gh-ost に準拠」を選択した場合、ターゲットデータベース内のテーブルがロックされる可能性があります。注意:pt-online-schema-change はサポートされていません。このツールを使用すると、DTS タスクが失敗します。 |
| 接続失敗時のリトライ時間 | 接続失敗後に DTS がリトライを試行する時間です。有効な値:10~1440 分。デフォルト値:720 分。30 を超える値を設定することを推奨します。複数のタスクで同一のソースまたはターゲットを共有する場合、最も最近設定された値が有効になります。 |
| ソースおよびターゲットデータベースでその他の問題が発生した際のリトライ待機時間 | DDL または DML の失敗後に DTS がリトライを試行する時間です。有効な値:1~1440 分。デフォルト値:10 分。10 を超える値を設定することを推奨します。この値は、接続失敗時のリトライ時間の値より小さくする必要があります。 |
| 完全なデータ移行におけるレート制限の有効化 | クエリ/秒(QPS)、RPS、および移行速度(MB/s)を上限値で制限することで、完全なデータ移行中の読み取り/書き込み負荷を制御します。完全なデータ移行が選択されている場合にのみ利用可能です。 |
| 増分移行におけるレート制限の有効化 | RPS および移行速度(MB/s)を上限値で制限することで、増分移行中の負荷を制御します。増分移行が選択されている場合にのみ利用可能です。 |
| 環境タグ | DTS インスタンスを識別するための任意のタグです。 |
| 転送および逆再生タスクのハートビートテーブルに対する SQL 操作を削除するかどうか | はい:DTS はハートビートテーブルに書き込みません。この場合、DTS インスタンスの遅延が表示されることがあります。いいえ:DTS はハートビートテーブルに書き込みます。これにより、ソースデータベースの物理バックアップおよびクローン作成に影響が出る可能性があります。 |
| ETL の設定 | データ移行中に抽出・変換・書き出し(ETL)を有効化し、データを処理します。詳細については、「データ移行またはデータ同期タスクにおける ETL の設定」をご参照ください。 |
| モニタリングとアラート | DTS タスクの作成時にモニタリングとアラート機能を設定するタスクの失敗または遅延がしきい値を超えた場合のアラートを設定します。詳細については、「」をご参照ください。 |
「[次へ: 検証設定]」をクリックして、データ検証を設定します。詳細については、「データ検証の設定」をご参照ください。
ステップ 6:設定の保存と事前チェックの実行
次へ:タスク設定の保存と事前チェック をクリックします。
このタスク構成の API パラメーターをプレビューするには、次へ:タスク設定の保存と事前チェック にカーソルを合わせ、OpenAPI パラメーターのプレビュー をクリックしてください。
DTS は、移行を開始する前に事前チェックを実行します。事前チェックが成功した場合にのみ、タスクが開始されます。
項目が失敗した場合: 詳細の表示 をクリックし、問題を修正した後、再度事前チェック をクリックします。
アラートが生成された場合:アラート詳細の確認 をクリックします。ダイアログで 無視 をクリックし、確認後、再度事前チェック をクリックします。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 7:インスタンスの購入
成功率 が 100% に達するまで待ち、その後 次へ:インスタンスの購入 をクリックします。
インスタンスの購入 ページで、以下の項目を構成します。
| パラメーター | 説明 |
|---|---|
| [リソースグループ設定項目] | データ移行インスタンスが属するリソースグループです。 デフォルト:[デフォルトのリソースグループ]。 詳細については、「Resource Management とは |
| [インスタンスクラス] | 移行速度はインスタンスクラスによって異なります。 詳細については、「データ移行インスタンスの仕様」をご参照ください。 |
Data Transmission Service(従量課金)利用規約 をお読みになり、同意した上で、購入して開始 をクリックします。
タスクがタスクリストに表示されます。そこから進行状況を監視できます。
ステップ 8:移行の完了
タスクのステータスが「完全なデータ移行完了」となり、増分移行の遅延がほぼゼロになった時点で、ターゲットデータベースはトラフィックを受け入れる準備が整います。
ワークロードをターゲットデータベースに切り替える前に、データ移行タスクを停止またはリリースするか、ターゲットデータベース上の DTS アカウントの書き込み権限を REVOKE で取り消してください。タスクを停止せずにトラフィックを切り替えると、再開されたタスクによってターゲットデータがソースデータで上書きされる可能性があります。
移行を完了するには、以下の手順を実行してください。
ソースおよびターゲットデータベース間のデータ整合性を検証します。
DTS 移行タスクを停止またはリリースします。あるいは、ターゲットデータベース上の DTS アカウントに付与された書き込み権限を
REVOKEで取り消します。アプリケーションのトラフィックをターゲット ApsaraDB RDS for MySQL インスタンスに切り替えます。
アプリケーションがターゲットデータベースに対して正しく機能することを検証します。
考慮事項
ピーク時間帯を避けて移行をスケジュールしてください。完全なデータ移行では、両方のデータベースの読み取りおよび書き込みリソースが使用され、データベースサーバーの負荷が増加します。
完全なデータ移行により、ターゲットデータベースでテーブルの断片化が発生します(同時 INSERT 操作によるもの)。完全なデータ移行完了後、ターゲットの表領域はソースの表領域よりも大きくなります。
DTS は、失敗したタスクを最大 7 日間再開しようと試みます。データの上書きを防止するため、ワークロードの切り替え前にタスクを停止またはリリースしてください。
DTS は、バイナリログ位置を進めるために、ソースデータベースで定期的に
CREATE DATABASE IF NOT EXISTS \`test\`を実行します。
次のステップ
データ検証: 移行後に、ソースと送信先間のデータ整合性を検証します。
オブジェクト名のマップ: 移行中にターゲットデータベース内のオブジェクトの名前を変更します。
課金概要:増分移行インスタンスの DTS 料金体系を理解します。