Data Transmission Service (DTS) を使用して、ApsaraDB RDS for MySQL から AnalyticDB for PostgreSQL へデータを移行します。DTS はスキーマ移行、完全なデータ移行、および増分データ移行をサポートしているため、移行中もソースデータベースを稼働させたままにできます。
サポートされるソースデータベース
DTS では、以下の MySQL ソースから AnalyticDB for PostgreSQL インスタンスへのデータ移行が可能です。
-
ApsaraDB RDS for MySQL インスタンス
-
自己管理データベースとしての MySQL データベース:
-
パブリック IP アドレスを持つデータベース
-
Elastic Compute Service (ECS) インスタンス上でホストされているデータベース
-
Database Gateway 経由で接続されたデータベース
-
Cloud Enterprise Network (CEN) 経由で接続されたデータベース
-
Express Connect、VPN Gateway、または Smart Access Gateway 経由で接続されたデータベース
-
本トピックでは、ApsaraDB RDS for MySQL を例としてソースデータベースを説明します。上記に示したすべてのサポート対象 MySQL ソースタイプについて、手順は同様です。
移行タイプ
このシナリオでは、DTS が以下の移行タイプをサポートしています。
| 移行タイプ | 機能概要 |
|---|---|
| スキーマ移行 | テーブルスキーマをソースから宛先へ移行します。ソースと宛先は異種データベースであるため、移行後のスキーマが異なる場合があります。開始前に、異種データベース間のデータ型マッピングをご確認ください。 |
| 完全なデータ移行 | 既存のすべてのデータをソースから宛先へ移行します。 |
| 増分データ移行 | 完全移行完了後、ソースからの変更を継続的にレプリケートすることで、アプリケーションを移行中も稼働させ続けられます。 |
移行方式を選択してください:
-
ダウンタイムありの一括切り替え: スキーマ移行 および 完全なデータ移行 を選択します。
-
ゼロダウンタイム移行(推奨): スキーマ移行、完全なデータ移行、および 増分データ移行 を選択します。
増分移行でサポートされる SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | CREATE TABLE、ALTER TABLE、TRUNCATE TABLE、DROP TABLE |
AnalyticDB for PostgreSQL への書き込み時、DTS は自動的に UPDATE ステートメントを REPLACE INTO ステートメントに変換します。プライマリキーに対する UPDATE 操作は、DELETE および INSERT ステートメントに変換されます。
移行中にソーステーブルのフィールドのデータ型を変更すると、DTS はエラーを返してタスクを停止します。復旧手順は以下のとおりです:1. データ型が変更されたテーブル(例: customer テーブル)を特定します。2. 宛先に更新されたスキーマを持つ新規テーブル(例: customer_new)を作成します。3. customer から customer_new へ INSERT INTO SELECT を使用してデータをコピーします。4. 元の customer テーブルを名前変更または削除し、customer_new を customer へ名前変更します。5. DTS コンソールで移行タスクを再開します。
課金
| 移行タイプ | インスタンス構成料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行と完全なデータ移行 | 無料 | アクセス方式パブリック IP アドレス[アクセス方式] が [パブリック IP アドレス] に設定されている場合、有料です。詳細については、「課金概要」をご参照ください。 |
| 増分データ移行 | 有料です。詳細については、「課金概要」をご参照ください。 | — |
制限事項
移行タスクを開始する前に、以下の制限事項をご確認ください。
ソースデータベースの要件
バイナリロギング(増分移行に必須)
増分移行タスクを実行する前に、ソースデータベースで以下のバイナリログパラメーターを設定してください。
| パラメーター | 必須値 | 備考 |
|---|---|---|
| バイナリロギング | 有効化 | 「インスタンスパラメーターの変更」を参照して、RDS MySQL のバイナリロギングを有効化します。 |
binlog_row_image |
full |
すべての MySQL ソースで必須です。full 以外に設定すると、事前チェックが失敗します。 |
binlog_format |
row |
セルフマネージド MySQL のみで必須です。 |
log_slave_updates |
ON |
デュアルプライマリクラスター構成のセルフマネージド MySQL のみで必須です。 |
| バイナリログ保持期間 | >24 時間(増分移行のみ);≥7 日(完全移行+増分移行) | 完全移行完了後は、保持期間を 24 時間以上に短縮できます。保持期間が不足していると、タスクが失敗したりデータ損失が発生したりする可能性があります。 |
セルフマネージド MySQL のセットアップについては、「アカウントの作成およびバイナリロギングの設定」をご参照ください。
RDS MySQL のバイナリログファイルを管理するには、「バイナリログファイルの管理」をご参照ください。
テーブル制約
-
テーブルには PRIMARY KEY または一意制約(UNIQUE constraint)が必要であり、すべてのフィールドが一意である必要があります。そうでない場合、宛先に重複レコードが生成される可能性があります。
-
データベース全体ではなく特定のテーブルのみを移行する場合、1 つのタスクで最大 1,000 個のテーブルをサポートします。1,000 個を超える場合は、複数のタスクを設定するか、データベース全体を移行してください。
移行中の操作制限
-
プライマリキーを変更する DDL ステートメントやコメントを追加するステートメント(例:
ALTER TABLE table_name COMMENT='Table comment';)を実行しないでください。 -
スキーマ移行および完全なデータ移行中に、データベースまたはテーブルのスキーマを変更する DDL ステートメントを実行しないでください。
-
完全なデータ移行のみを実行する場合、ソースデータベースへのデータ書き込みを行わないでください。この制約を回避するには、スキーマ移行、完全なデータ移行、および増分データ移行を同時に実行してください。
その他のソースデータベース制限
-
MySQL 8.0.23 以降 — 不可視カラム:ソーステーブルに不可視カラムが含まれている場合、それらは移行されず、データ損失が発生します。カラムを可視にするには、次のコマンドを実行します:
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE;。プライマリキーを持たないテーブルは自動的に不可視のプライマリキーを生成します — これらも可視にしてください。「Invisible Columns」および「Generated Invisible Primary Keys」をご参照ください。 -
DATETIME 値 `0000-00-00 00:00:00`:DTS はこの値を宛先で
nullに変換します。これを回避するには、移行前に一時的に値を0001-01-01 00:00:00に変更するか、宛先のカラムを空欄のままにしてください。 -
バイナリログ変更操作:物理バックアップからのデータ復元やカスケード操作など、バイナリログ変更操作によって生成されたデータは移行されません。このデータが宛先に欠落している場合は、業務許容範囲内で再度完全移行を実行してください。
-
EncDB 機能:EncDB 機能が有効化された ApsaraDB RDS for MySQL インスタンスでは、完全なデータ移行はサポートされていません。
-
透過的データ暗号化(TDE):TDE が有効化された ApsaraDB RDS for MySQL インスタンスでは、スキーマ移行、完全なデータ移行、および増分データ移行のすべてがサポートされています。
宛先データベースの要件
-
移行対象として選択できるのはテーブルのみです。ビュー、トリガー、およびストアドプロシージャは移行されません。
-
以下のデータ型は移行できません:VARBIT、GEOMETRY、ARRAY、UUID、TSQUERY、TSVECTOR、TXID_SNAPSHOT、POINT。
-
プレフィックスインデックスは移行できません。ソースデータベースにプレフィックスインデックスが存在する場合、タスクが失敗する可能性があります。
-
ソーステーブルにプライマリキーがある場合、宛先のプライマリキー列はソースと一致する必要があります。ソーステーブルにプライマリキーがない場合、宛先のプライマリキー列と分散キーは同一である必要があります。
-
宛先のユニークキー(プライマリキー列を含む)には、分散キーのすべての列が含まれている必要があります。
-
宛先テーブルは append-optimized(AO)テーブルであってはなりません。
-
カラムマッピングを使用する場合、またはソースと宛先のスキーマが異なる場合、宛先に存在しないカラムは移行されず、データ損失が発生します。
パフォーマンスおよび運用上の考慮事項
-
移行を開始する前に、ソースおよび宛先データベースのパフォーマンスへの影響を評価してください。可能であれば、非ピーク時間帯に移行タスクを実行してください。
-
初期完全同期中、並列の INSERT 操作により宛先テーブルに断片化が発生します。完全移行完了後、宛先の表領域はソースよりも大きくなる可能性があります。
-
特定のテーブル(データベース全体ではなく)を移行する場合、移行対象のオブジェクトに対してオンライン DDL 操作を行うために pt-online-schema-change などのツールは使用しないでください。代わりに Data Management (DMS) を使用してください。詳細については、「ロックなし DDL 操作の実行」をご参照ください。
-
移行中は、他のソースからのデータ書き込みを宛先に対して行わないでください。複数のソースから同時書き込みを行うと、データ損失が発生する可能性があります。
セルフマネージド MySQL の特殊ケース
-
移行タスク実行中にソースデータベースでプライマリ/セカンダリ スイッチオーバーが発生すると、タスクが失敗します。
-
移行遅延は、最新の移行済みデータのタイムスタンプと現在のソースタイムスタンプに基づいて計算されます。ソースで長期間 DML 操作が実行されない場合、遅延の測定値が不正確になる可能性があります。遅延を更新するには、ソースで DML 操作を実行してください。データベース全体を移行対象とする場合は、1 秒ごとにデータ更新を受け付けるハートビートテーブルを作成してください。
-
DTS は定期的にソースデータベースで
CREATE DATABASE IF NOT EXISTS \`test\`を実行し、バイナリログファイルの位置を進めます。
ApsaraDB RDS for MySQL の特殊ケース
-
増分データ移行において、トランザクションログを記録しない ApsaraDB RDS for MySQL インスタンス(例:読み取り専用の RDS MySQL V5.6 インスタンス)はソースとして使用できません。
-
DTS は定期的にソースデータベースで
CREATE DATABASE IF NOT EXISTS \`test\`を実行し、バイナリログファイルの位置を進めます。 -
スキーマ移行中、DTS はソースデータベースから外部キーを宛先データベースへ移行します。完全なデータ移行および増分データ移行中、DTS はセッションレベルで外部キー制約チェックおよびカスケード操作を一時的に無効化します。移行中のソースでのカスケード更新および削除操作は、データの不整合を引き起こす可能性があります。
必要なアカウント権限
以下の表に、各移行タイプに必要な最小権限を示します。
| データベース | スキーマ移行 | 完全なデータ移行 | 増分データ移行 |
|---|---|---|---|
| ApsaraDB RDS for MySQL | SELECT | SELECT | SELECT、REPLICATION SLAVE、REPLICATION CLIENT |
| AnalyticDB for PostgreSQL | 読み取りおよび書き込み | 読み取りおよび書き込み | 読み取りおよび書き込み |
REPLICATION SLAVE および REPLICATION CLIENT は増分データ移行にのみ必要です。完全移行のみのタスクではこれらの権限は不要です。DTS はこれらの権限をデータベースアカウントに自動的に付与します。
データベースアカウントの作成および権限付与については、以下をご参照ください。
-
ApsaraDB RDS for MySQL:「アカウントの作成」および「アカウント権限の変更」
-
AnalyticDB for PostgreSQL:「データベースアカウントの作成および管理」
移行タスクの作成
開始する前に、以下の点を確認してください。
-
AnalyticDB for PostgreSQL インスタンスが作成済みであること。詳細については、「インスタンスの作成」をご参照ください。
-
宛先インスタンスの利用可能なストレージ容量が、ソースインスタンス内の合計データサイズより大きいこと
手順の概要:
-
DTS または DMS コンソールの [データ移行] ページに移動します。
-
タスクを作成し、ソースおよび宛先データベースを構成します。
-
移行タイプおよび移行対象を選択します。
-
高度な設定を構成します。
-
事前チェックを実行し、移行インスタンスを購入します。
ステップ 1:[データ移行] ページへ移動
DTS コンソール
DMS コンソール
実際のステップは、DMS コンソールのモードおよびレイアウトによって異なる場合があります。 詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
ステップ 2:ソースおよび宛先データベースの構成
タスクの作成 をクリックし、以下のパラメーターを構成します。
タスク設定:
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS が自動的に名前を生成します。タスクを識別できるように、意味のある名前を指定してください。名前は一意である必要はありません。 |
ソースデータベース
| パラメーター | 説明 |
|---|---|
| データベースタイプ | [MySQL] を選択します。 |
| アクセス方法 | [Alibaba Cloud インスタンス] を選択します。 |
| インスタンスリージョン | ソースの ApsaraDB RDS for MySQL インスタンスが存在するリージョンを選択します。 |
| Alibaba Cloudアカウント全体でのデータの複製 | 同一アカウント内の移行の場合は [いいえ] を選択します。 |
| RDS インスタンス ID | ソースの ApsaraDB RDS for MySQL インスタンスを選択します。 |
| データベースアカウント | データベースアカウントを入力します。 詳細については、「必要なアカウント権限」をご参照ください。 |
| データベースパスワード | アカウントのパスワードを入力します。 |
| 暗号化 | 要件に応じて [非暗号化] または [SSL 暗号化] を選択します。 SSL 暗号化を使用するには、まず RDS インスタンスで SSL を有効にする必要があります。 詳細については、「クラウド証明書を使用して SSL 暗号化を有効にする」をご参照ください。 |
宛先データベース
| パラメーター | 説明 |
|---|---|
| データベースタイプ | AnalyticDB for PostgreSQL を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | 宛先の AnalyticDB for PostgreSQL インスタンスが配置されているリージョンを選択します。 |
| インスタンス ID | 宛先の AnalyticDB for PostgreSQL インスタンスを選択します。 |
| データベース名 | AnalyticDB for PostgreSQL インスタンス内の宛先データベース名を入力します。 |
| データベースアカウント | インスタンスの初期アカウント、または RDS_SUPERUSER 権限を持つアカウントを入力します。「ユーザーおよび権限の管理」をご参照ください。 |
| データベースパスワード | アカウントのパスワードを入力します。 |
接続テストと続行 をクリックします。
DTS サーバーの CIDR ブロックは、ソースおよびターゲットデータベースのセキュリティ設定に追加する必要があります。DTS は Alibaba Cloud インスタンスに対してこれらの設定を自動的に追加します。自己管理データベースの場合、[接続テスト] を [DTS サーバーの CIDR ブロック] ダイアログボックスでクリックします。詳細については、「DTS サーバーの CIDR ブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。
ステップ 3:移行タイプおよび移行対象の選択
オブジェクトの構成 ページで、以下のパラメーターを構成します。
| パラメーター | 説明 |
|---|---|
| 移行タイプ | ご利用のシナリオに応じて移行タイプを選択します。「移行方式の選択」をご参照ください。 説明
スキーマ移行 をスキップする場合、宛先データベースおよびテーブルを手動で作成し、選択されたオブジェクト でオブジェクト名マッピングを有効化したうえで続行してください。増分データ移行 をスキップする場合、移行中にソースへのデータ書き込みを行わないでください。 |
| DDL操作とDML操作の同期 | 増分移行に含める SQL 操作を選択します。テーブル単位で操作をカスタマイズするには、選択されたオブジェクト 内のオブジェクトを右クリックして操作を選択します。 |
| 競合テーブルの処理モード | 事前チェックおよびエラー報告(デフォルト):宛先にソーステーブルと同名のテーブルが存在する場合、事前チェックが失敗します。競合するテーブルの名前変更には、「オブジェクト名マッピング」をご利用ください。エラーを無視して続行:名前の競合に関する事前チェックをスキップします。完全移行中、宛先の競合レコードは保持されます。増分移行中、競合レコードは上書きされます。注意:ソースと宛先のスキーマの違いにより、部分的な移行またはタスクの失敗が発生する可能性があるため、慎重に使用してください。 |
| ストレージエンジンタイプ | 宛先テーブルのストレージエンジンです。デフォルト: Beam。宛先の AnalyticDB for PostgreSQL インスタンスのマイナーバージョンが v7.0.6.6 以降であり、スキーマ移行 が選択されている場合にのみ利用可能です。 |
| ソースオブジェクト | 一覧からオブジェクトを選択し、矢印アイコンをクリックして 選択されたオブジェクト に追加します。カラム、テーブル、またはスキーマを選択できます。テーブルまたはカラムを選択すると、ビュー、トリガー、およびストアドプロシージャは除外されます。 |
| 選択されたオブジェクト | オブジェクトを右クリックして、名前変更、SQL 操作のカスタマイズ、WHERE フィルター条件の指定を行います。一括編集 をクリックすると、複数のオブジェクトを一度に名前変更できます。「オブジェクト名のマッピング」および「フィルター条件の指定」をご参照ください。 説明
オブジェクト名マッピングを使用したオブジェクトの名前変更により、依存オブジェクトの移行が失敗する可能性があります。 |
次へ:高度な設定 をクリックします。
ステップ 4:高度な設定の構成
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | デフォルトでは、タスクは共有クラスターで実行されます。安定性を高めるには、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| 接続失敗時の再試行時間 | DTS が接続失敗時に再試行する時間範囲です。有効範囲:10~1,440 分。デフォルト:720 分。少なくとも 30 分に設定してください。このウィンドウ内で DTS が再接続できた場合、タスクは自動的に再開されます。それ以外の場合は、タスクが失敗します。 説明
複数のタスクが同一のソースまたは宛先データベースを共有する場合、最も最近設定された再試行時間が優先されます。再試行期間中は、DTS インスタンスの課金が発生します。 |
| その他の問題発生時の再試行時間 | DTS が失敗した DDL または DML 操作を再試行する時間範囲です。有効範囲:1~1,440 分。デフォルト:10 分。少なくとも 10 分に設定してください。この値は、接続失敗時の再試行時間 よりも小さくする必要があります。 |
| 完全なデータ移行のスロットリングを有効化 | 完全移行中のソースおよび宛先への読み取り/書き込み負荷を制限します。ソースへのクエリ/秒(QPS)、完全移行のレコード/秒(RPS)、およびデータ移行速度(MB/s)を設定します。完全なデータ移行 が選択されている場合にのみ利用可能です。 |
| 増分データ移行のスロットリングを有効化 | 増分移行中の負荷を制限します。RPS およびデータ移行速度(MB/s)を設定します。増分データ移行 が選択されている場合にのみ利用可能です。 |
| オブジェクト名を引用符で囲む | はいアラート通知設定 を選択した場合、DTS は以下のいずれかの条件に該当する際に、スキーマ、テーブル、およびカラム名を引用符で囲みます:ソースデータベースが大文字小文字を区別し、混合ケースの名前を持つ場合;テーブル名が英字以外の文字で始まるか、サポートされていない特殊文字を含む場合;または名前が宛先の予約キーワードである場合。 |
| 転送および逆再生タスクのハートビートテーブルに対する SQL 操作を削除するかどうか | はい:DTS はハートビートテーブル操作をソースデータベースに書き込みません。遅延値が表示される場合があります。いいえ:DTS はハートビートテーブル操作をソースデータベースに書き込みます。これにより、ソースデータベースの物理バックアップおよびクローン作成に影響が出る可能性があります。 |
| 環境タグ | DTS インスタンスを識別するためのタグです。任意設定です。 |
| ETL の構成 | 抽出・変換・書き出し (ETL) 機能を有効にします。[はい] を選択すると、データ処理文を入力できます。詳細については、「ETL とは」および「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。 |
| モニタリングとアラート | タスクが失敗した場合、または移行遅延がしきい値を超えた場合に通知を受信するには、[はい] を選択します。アラートのしきい値と通知設定を構成します。詳細については、「モニタリングとアラートの設定」をご参照ください。 |
データ検証タスクを設定するには、[次へ: データ検証] をクリックします。詳細については、「データ検証タスクの設定」をご参照ください。
(任意) 宛先の AnalyticDB for PostgreSQL テーブルのプライマリキー列および分散キーを構成します。「CREATE TABLE」をご参照ください。
このオプションは、スキーマ移行 が選択されている場合にのみ利用可能です。
ステップ 5:事前チェックの実行および移行インスタンスの購入
-
次へ:タスク設定の保存および事前チェック をクリックします。
このタスク構成の API パラメーターを表示するには、次へ:タスク設定の保存および事前チェック 上にマウスを合わせ、OpenAPI パラメーターのプレビュー をクリックします。
-
事前チェックが完了するまでお待ちください。
-
チェック項目が失敗した場合、失敗した項目の横にある 詳細の表示 をクリックし、問題を修正してから 再チェック をクリックします。
-
チェック項目が警告を生成し、それを無視したい場合、警告詳細の確認 をクリックし、次に 無視、OK、そして 再チェック をクリックします。警告を無視すると、データの不整合が発生する可能性があります。
-
-
成功率 が 100% になったら、次へ:インスタンスの購入 をクリックします。
-
インスタンスの購入 ページで、インスタンスパラメーターを構成します。
パラメーター 説明 Resource Group 移行インスタンスのリソースグループです。デフォルト: default resource group。詳細については、「What is Resource Management? Instance Class 必要な移行速度に基づいてインスタンスクラスを選択します。詳細については、「Instance classes of data migration instances」をご参照ください。 -
Data Transmission Service(従量課金)サービス利用規約 を読み、同意したうえで、購入して開始 をクリックします。確認ダイアログで OK をクリックします。
移行タスクの監視
タスクが開始された後、データ移行 ページに移動して進捗を監視します。
-
完全なデータ移行のみ:移行完了時にタスクが自動的に停止し、ステータスが 完了 に変わります。
-
完全+増分データ移行:増分移行フェーズは継続的に実行され、自動的に停止しません。ステータスは 実行中 と表示されます。
DTS タスクが失敗した場合、DTS テクニカルサポートが 8 時間以内に復旧を試みます。復旧中、タスクが再起動されたり、タスクパラメーターが変更されたりすることがあります。データベースパラメーターは変更されません。
次のステップ
移行が完了し、ソースおよび宛先データベース間のデータ整合性が確認できたら、アプリケーションの接続設定を更新して、AnalyticDB for PostgreSQL インスタンスを指すようにしてください。