Data Transmission Service (DTS) を使用して、自己管理 MySQL データベースから PolarDB for MySQL クラスターへデータを移行します。DTS はスキーマ移行、完全なデータ移行、および増分データ移行をサポートしているため、ダウンタイムを最小限に抑えたり、ゼロダウンタイムで移行を完了できます。
仕組み
3 つの移行フェーズは順次実行されます。
スキーマ移行 — DTS が選択されたオブジェクト(テーブル、ビュー、トリガー、ストアドプロシージャ、ストアドファンクション)のスキーマをソースデータベースから PolarDB for MySQL クラスターへコピーします。
完全なデータ移行 — DTS がソースデータベース内の既存の全データをクラスターへコピーします。
増分データ移行 — 完全なデータ移行が完了した後、DTS はソースデータベースにおける継続的な変更を継続的にレプリケーションします。これにより、アプリケーションを停止せずに切り替え(カットオーバー)が可能になります。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
バージョン 5.1、5.5、5.6、5.7、または 8.0 の自己管理 MySQL データベース。第三者のクラウドプラットフォーム上でホストされている場合、インターネット経由でアクセス可能である必要があります。
利用可能なストレージがソースデータの合計サイズより大きい送信先の ApsaraDB RDS for MySQL インスタンス。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
ソースデータの合計サイズより大きな利用可能なストレージ容量を持つ PolarDB for MySQL クラスター。詳細については、「Enterprise Edition クラスターの購入」または「サブスクリプションクラスターの購入」をご参照ください。
ソース MySQL データベースおよびターゲット PolarDB for MySQL クラスター用のデータベースアカウント。各アカウントには、「必要な権限」に記載された権限が必要です。
増分データ移行を利用する場合、ソースデータベースでバイナリロギングを有効化する必要があります。詳細については、「バイナリロギングの要件」をご参照ください。
必要な権限
以下の表に、各移行タイプに必要な最小限の権限を示します。
| データベース | スキーマ移行 | 完全なデータ移行 | 増分データ移行 |
|---|---|---|---|
| 自己管理 MySQL データベース | SELECT | SELECT | 移行対象オブジェクトに対する SELECT 権限;REPLICATION CLIENT;REPLICATION SLAVE;SHOW VIEW;CREATE(データベースおよびテーブルに対して。DTS がハートビートデータを格納する dts データベースを作成できるようにするため) |
| PolarDB for MySQL クラスター | 読み取りおよび書き込み | 読み取りおよび書き込み | 読み取りおよび書き込み |
アカウントの作成および権限付与手順については、以下をご参照ください。
自己管理 MySQL データベース: 自己管理 MySQL データベースのアカウントを作成し、バイナリロギングを設定する
PolarDB for MySQL クラスター:「データベースアカウントの作成と管理」
バイナリロギングの要件
増分データ移行では、ソースデータベースのバイナリログから読み取りを行います。移行タスクを開始する前に、ソースデータベースで以下の設定を確認してください。
| パラメーター | 必須値 | 備考 |
|---|---|---|
| バイナリロギング | 有効 | DTS はバイナリログから増分変更を読み取ります。無効の場合、事前チェックに失敗し、タスクを開始できません。 |
binlog_format | row | ロウレベルのレプリケーションに必要です。他のフォーマットではデータの不整合が発生する可能性があります。 |
binlog_row_image | full | 完全なロウイメージがキャプチャされることを保証します。 |
| バイナリログ保持期間 | 最低 7 日間 | DTS が読み取る前にログがパージされると、タスクが失敗します。例外的なケースではデータ損失が発生する可能性があります。 |
log_slave_updates | ON(デュアルプライマリクラスターのみ) | ソースがデュアルプライマリクラスター構成の自己管理 MySQL データベースである場合に必要です。これにより、DTS がすべてのバイナリログを取得できます。 |
DTS は定期的にソースデータベースで CREATE DATABASE IF NOT EXISTS \`test\` を実行し、バイナリログファイルの位置を進めます。
課金
| 移行タイプ | インスタンス料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行および完全なデータ移行 | 無料 | Alibaba Cloud からインターネットを経由してデータが移行される場合にのみ課金されます。詳細については、「課金概要」をご参照ください。 |
| 増分データ移行 | 課金済み。詳細については、「課金概要」をご参照ください。 | — |
増分移行でサポートされる SQL 操作
| 操作タイプ | 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 操作はデータの不整合を引き起こす可能性があります。移行対象としてテーブルを選択し、移行中にそのテーブル名を変更した場合、該当テーブルのデータはターゲットへ移行されません。これを回避するには、移行対象としてデータベース全体を選択し、テーブルの名前変更前後両方のデータベースが移行対象に含まれていることを確認してください。
移行タスクの構成および実行
ステップ 1:データ移行ページを開く
以下のいずれかの方法を使用します。
DTS コンソール
DTS コンソール にログインします。
左側のナビゲーションウィンドウで、データ移行 をクリックします。
画面左上隅で、移行インスタンスを配置するリージョンを選択します。
DMS コンソール
正確な手順は、Data Management Service (DMS) コンソールのモードおよびレイアウトによって異なる場合があります。詳しくは、「簡易モード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
DMS コンソール にログインします。
上部のナビゲーションバーで、データ開発 > DTS (DTS) > データ移行 の順にポイントします。
データ移行タスク の右側にあるドロップダウンリストから、移行インスタンスを配置するリージョンを選択します。
ステップ 2:移行タスクの作成
タスクの作成 をクリックします。
右上隅に 新規設定ページ ボタンが表示された場合は、それをクリックして新規設定ページに切り替えます。
説明代わりに 以前のバージョンに戻る ボタンが表示されている場合は、すでに新規設定ページにいます。このステップはスキップしてください。
ステップ 3:ソースおよびターゲットデータベースの構成
ソースおよびターゲットデータベースの構成後、ページ上部に表示される 制限事項 を必ずご確認ください。このステップをスキップすると、タスクが失敗したり、データの不整合が発生する可能性があります。
以下の表に従ってパラメーターを構成します。
ソースデータベース
| パラメーター | 説明 |
|---|---|
| 既存の接続を選択 | 既存の接続を選択すると、データベースパラメーターが自動入力されます。手動で接続情報を入力する場合は、空白のままにしてください。データベースを登録するには、「データベース接続の管理」をご参照ください。 |
| データベースタイプ | MySQL を選択します。 |
| アクセス方法 | インターネット経由でアクセス可能なソースデータベースの場合は、パブリック IP アドレス を選択します。その他のアクセス方法については、「事前準備の概要」をご参照ください。 |
| インスタンスリージョン | ソースデータベースの物理的位置に最も近いリージョンを選択します。 |
| ホスト名または IP アドレス | ソースデータベースのパブリック IP アドレスまたはホスト名です。 |
| ポート | ソース MySQL データベースのサービスポートです。デフォルト値:3306。 |
| データベースアカウント | 「必要な権限」に記載された権限を持つアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | ソースデータベースの構成に応じて、非暗号化 または SSL 暗号化 を選択します。 SSL 暗号化 を選択した場合は、CA 証明書 をアップロードし、CA キー を設定します。 |
ターゲットデータベース
| パラメーター | 説明 |
|---|---|
| 既存の接続を選択 | 既存の接続を選択すると、データベースパラメーターが自動的に入力されます。空白のままにすると、接続情報を手動で入力できます。 |
| データベースタイプ | PolarDB for MySQL を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスのリージョン | ターゲット PolarDB for MySQL クラスターが配置されているリージョンです。 |
| PolarDB クラスター ID | ターゲット PolarDB for MySQL クラスターの ID です。 |
| データベースアカウント | 「必要な権限」に記載された権限を持つアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | 要件に応じて SSL 暗号化を設定します。詳細については、「SSL 暗号化の設定」をご参照ください。 |
ステップ 4:接続性のテスト
ページ下部の 接続性のテストと続行 をクリックし、DTS サーバーの CIDR ブロック ダイアログボックスで 接続性のテスト をクリックします。
DTS サーバーの CIDR ブロックが、ソースおよびターゲットデータベースのセキュリティ設定に追加されていることを確認してください。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
ステップ 5:移行対象および移行タイプの選択
オブジェクトの構成 ページで、以下のパラメーターを構成します。
| パラメーター | 説明 |
|---|---|
| 移行タイプ | 一括移行の場合は、スキーマ移行 および 完全なデータ移行 を選択します。ダウンタイムを最小限に抑える移行を行う場合は、増分データ移行 も選択します。 増分データ移行 を選択しない場合、データ整合性を維持するため、移行中はソースデータベースへの書き込みをすべて停止する必要があります。 |
| ソースデータベースのトリガーの移行方法 | トリガーの移行方法を選択します。このパラメーターは スキーマ移行 が選択されている場合のみ利用可能です。「ソースデータベースからのトリガーの同期または移行」をご参照ください。 |
| 競合するテーブルの処理モード | 事前チェックおよびエラー報告オブジェクト名マッピング(デフォルト):ソースおよびターゲットに同一のテーブル名が存在する場合、事前チェックに失敗します。開始前に を使用して競合するテーブルをリネームしてください。エラーを無視して続行:チェックをスキップします。完全なデータ移行中は、ターゲットの既存レコードが保持され、増分データ移行中は上書きされます。慎重に使用してください。 |
| イベントの移行の有無 | イベントを移行するかどうかを指定します。移行する場合は、追加の手順を実行してデータの不整合を回避する必要があります。「イベントの同期または移行」をご参照ください。 |
| ターゲットインスタンスにおけるオブジェクト名の大文字小文字の処理 | 宛先インスタンスにおけるデータベース名、テーブル名、および列名の大文字小文字のポリシーを設定します。デフォルト: DTS デフォルトポリシー。詳細については、「宛先インスタンスにおけるオブジェクト名の大文字小文字の指定」をご参照ください。 |
| ソースオブジェクト | 移行対象のオブジェクトを選択し、 |
| 選択済みオブジェクト | 単一のオブジェクトの名前を変更するには、オブジェクトを右クリックします。複数のオブジェクトの名前を一度に変更するには、右上隅の [バッチ編集] をクリックします。「オブジェクト名のマッピング」をご参照ください。条件でデータをフィルターするには、テーブルを右クリックして WHERE 句を指定します。「フィルター条件の指定」をご参照ください。 |
オブジェクト名マッピングによる移行対象のリネームは、依存関係のある他のオブジェクトの移行失敗を引き起こす可能性があります。
ステップ 6:高度な設定の構成
次へ:高度な設定 をクリックし、以下のパラメーターを構成します。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。専用クラスターを購入することで、タスクの安定性を向上させることができます。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| ターゲットデータベースのストレージエンジンの選択 | InnoDB(デフォルトのストレージエンジン)または X-Engine(オンライントランザクション処理(OLTP)向けストレージエンジン)。 |
| ソーステーブルでオンライン DDL ツールによって生成された一時テーブルをターゲットデータベースにコピーする。 | DTS が、DMS または gh-ost を使用して実行されたオンライン DDL 操作の一時テーブルをどのように処理するかを制御します。はい:一時テーブルのデータを移行(遅延が増加する可能性あり)。いいえ、DMS オンライン DDL に適応:一時テーブルのデータをスキップし、DMS からの元の DDL ステートメントのみを移行(ターゲットテーブルがロックされる可能性あり)。いいえ、gh-ost に適応:一時テーブルのデータをスキップし、gh-ost からの元の DDL ステートメントのみを移行(ターゲットテーブルがロックされる可能性あり)。 重要 ソースデータベースでオンライン DDL 操作に pt-online-schema-change を使用しないでください。DTS タスクが失敗します。 |
| アカウントの移行の有無 | ソースデータベースのアカウント情報を移行するかどうかを指定します。はい の場合、移行するアカウントを選択し、DTS アカウントの権限を確認します。 |
| 接続失敗時の再試行時間 | 接続失敗後に DTS が再試行する時間です。範囲:10~1,440 分。デフォルト値:720 分。最低でも 30 分以上に設定してください。この期間内に DTS が再接続できた場合、タスクは自動的に再開されます。注:同じソースまたはターゲットデータベースを共有する複数のタスクで異なる値が設定されている場合、最新の値が優先されます。 |
| その他の問題発生時の再試行時間 | DDL または DML 操作の失敗後に DTS が再試行する時間です。範囲:1~1,440 分。デフォルト値:10 分。最低でも 10 分以上に設定し、接続失敗時の再試行時間 より短く設定する必要があります。 |
| 完全なデータ移行のレート制限の有効化 | 完全なデータ移行中の読み取り/書き込みレートを制限し、データベースサーバーへの負荷を軽減します。ソースデータベースへの QPS、完全なデータ移行の RPS、および 完全移行のデータ移行速度(MB/s) を構成します。完全なデータ移行 が選択されている場合にのみ利用可能です。 |
| 増分データ移行のレート制限の有効化 | 増分データ移行中のレプリケーションレートを制限します。増分データ移行の RPS および 増分移行のデータ移行速度(MB/s) を構成します。増分データ移行 が選択されている場合にのみ利用可能です。 |
| 正方向および逆方向タスクのハートビートテーブルに対する SQL 操作の削除の有無 | はい:DTS はソースデータベースにハートビート SQL 操作を書き込みません。移行遅延が表示される場合があります。いいえ:DTS はソースデータベースにハートビート SQL 操作を書き込みます。ソースデータベースの物理バックアップおよびクローン作成に影響を与える可能性があります。 |
| ETL の構成 | データ移行中にデータを処理するために、抽出・変換・書き出し (ETL) を有効化します。詳細については、「ETL とは?」および「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。 |
| モニタリングとアラート | はい: アラートのしきい値と通知設定を構成して、タスクが失敗した場合や移行遅延がしきい値を超えた場合に、DTS がアラート連絡先に通知するようにします。『モニタリングとアラートの設定』をご参照ください。いいえ: アラート機能はありません。 |
| 環境タグ | DTS インスタンスを識別するための任意のタグです。 |
ステップ 7:データ検証の構成(任意)
[データ検証] へ進む をクリックして、ソースと送信先間のデータ整合性を確認するデータ検証タスクを設定します。詳細については、「データ検証タスクの設定」をご参照ください。
ステップ 8:事前チェックの実行およびインスタンスの購入
次へ:タスク設定の保存および事前チェック をクリックします。
説明DTS タスクをプログラムで構成するための API パラメーターを表示するには、次へ:タスク設定の保存および事前チェック 上にポインターを合わせ、進む前に OpenAPI パラメーターのプレビュー をクリックします。
事前チェックの完了を待ちます。いずれかの項目が失敗した場合は、詳細の表示 をクリックして原因を確認し、問題を修正してから再度事前チェックを実行します。事前チェック項目が無視可能なアラートをトリガーした場合は、アラートの詳細の確認 をクリックし、その後 無視、OK の順にクリックしてから、再度事前チェックを実行します。アラートを無視すると、データの不整合が発生する可能性があります。
成功率 が 100% に達した場合、次へ:インスタンスの購入 をクリックします。
インスタンスの購入 ページで、以下のパラメーターを構成します。
パラメーター 説明 リソースグループ 移行インスタンスのリソースグループです。デフォルト値:デフォルトリソースグループResource Management とは インスタンスクラス インスタンスクラスによって移行速度が決まります。要件に基づいて選択してください。詳細については、「データ移行インスタンスのインスタンスクラス」をご参照ください。 Data Transmission Service(従量課金)サービス利用規約 をお読みになり、同意した上で、購入および開始 > OK をクリックします。
移行タスクが開始されます。データ移行 ページで進行状況を監視できます。
移行後
移行タスクが完了した後、アプリケーションを PolarDB for MySQL クラスターに切り替える前に、以下の手順を実行してください。
移行遅延が 0 になるまで待機 — 増分データ移行を選択した場合、移行遅延が 0 秒に低下し、一定期間その状態が維持されるまで待機します。これにより、クラスターがソースデータベースと完全に同期していることが確認されます。
DTS タスクの停止または解放 — DTS は失敗したタスクを最大 7 日間自動的に再試行します。ワークロードをターゲットに切り替える前に、タスクを停止または解放してください。タスクを停止しない場合、再開された移行によってターゲットデータベースのデータがソースから上書きされる可能性があります。あるいは、ターゲットデータベースにアクセスする DTS アカウントの書き込み権限を取り消すために
REVOKEを実行できます。権限の再構築 — スキーマ移行中、DTS はビュー、ストアドプロシージャ、および関数の SECURITY 属性を DEFINER から INVOKER に変更しますが、ユーザーアカウント情報は移行しません。ターゲットクラスター内のビュー、ストアドプロシージャ、およびストアドファンクションについて、INVOKER に必要な読み取りおよび書き込み権限を付与してください。
アプリケーションの検証 — 切り替えを完了する前に、PolarDB for MySQL クラスターに対して健全性テストを実行し、データ整合性およびアプリケーションの動作を確認してください。
アプリケーションの切り替え — アプリケーションの接続文字列を PolarDB for MySQL クラスターを指すように更新します。
制限事項
ソースデータベースの制限事項
ソースサーバーには十分なアウトバウンド帯域幅が必要です。帯域幅が不足していると、移行速度が低下します。
移行対象のテーブルには、プライマリキーまたはすべてのフィールドが一意である一意制約(UNIQUE constraint)が必要です。これらの制約がない場合、ターゲットデータベースに重複レコードが含まれる可能性があります。
テーブルを移行対象として選択し、ターゲットでテーブル名またはカラム名を変更する予定がある場合、1 つのタスクで移行できるテーブル数は最大 1,000 個です。この制限を超えるタスクはリクエストエラーを返します。大規模な移行は複数のタスクに分割するか、データベース全体を移行してください。
スキーマ移行および完全なデータ移行中は、データベースまたはテーブルのスキーマを変更する DDL ステートメントを実行しないでください。移行タスクが失敗します。
完全なデータ移行のみを実行する場合、移行中はソースデータベースへの書き込みを停止してください。これによりデータ整合性が確保されます。最良の結果を得るには、スキーマ移行、完全なデータ移行、および増分データ移行を同時に選択することを推奨します。
外部キーの動作
スキーマ移行中、DTS はソースからターゲットへ外部キーを移行します。
完全なデータ移行および増分データ移行中、DTS はセッションレベルで外部キー制約チェックおよびカスケード操作を一時的に無効化します。この期間中にソースデータベースで実行されたカスケード更新および削除操作は、データの不整合を引き起こす可能性があります。
一般的な制限事項
互換性を確保するため、ソースおよびターゲットの MySQL バージョンは一致している必要があります。
ピーク時間帯を避けて移行を行ってください。完全なデータ移行では、両方のデータベースの読み取りおよび書き込みリソースが使用され、データベースサーバーの負荷が増加します。
完全なデータ移行中の同時 INSERT 操作により、ターゲットでテーブルの断片化が発生します。完全なデータ移行後、ターゲットの表領域はソースよりも大きくなります。
FLOAT または DOUBLE 型のカラムについては、DTS が
ROUND(COLUMN, PRECISION)を使用して値を取得します。精度が指定されていない場合、DTS は FLOAT に対して 38 桁、DOUBLE に対して 308 桁を使用します。開始前に、これが要件を満たしていることを確認してください。DATETIME 型から VARCHAR 型へのデータ変換はできません。
ターゲットデータベースで DDL 文が失敗した場合でも、DTS タスクは実行を継続します。失敗した DDL 文は、タスクログ で確認できます。
EncDB 機能が有効化された ApsaraDB RDS for MySQL インスタンスをソースデータベースとして使用する場合、完全なデータ移行はサポートされていません。
特殊なケース
プライマリ/セカンダリ スイッチオーバー — 移行タスク実行中にソースデータベースでプライマリ/セカンダリ スイッチオーバーが発生した場合、タスクが失敗します。
DML 活動が少ない場合 — 長期間にわたりソースで DML 操作が実行されない場合、移行遅延が不正確になる可能性があります。遅延表示を更新するには、DML 操作を実行してください。データベース全体を移行対象として選択した場合は、1 秒ごとに更新されるハートビートテーブルを作成してください。
ApsaraDB RDS for MySQL の読み取り専用インスタンス — トランザクションログを記録しない ApsaraDB RDS for MySQL V5.6 の読み取り専用インスタンスは、増分データ移行のソースデータベースとして使用できません。
PolarDB for MySQL をターゲットとして使用する場合 — ソースデータベース名が PolarDB の命名規則に準拠している場合、DTS はターゲットクラスターにデータベースを自動的に作成します。命名規則に準拠していない場合は、移行タスクの構成前に手動でデータベースを作成してください。「データベースの管理」をご参照ください。PolarDB for MySQL クラスターへの完全なデータ移行では、レート制限はサポートされていません。