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