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