Data Transmission Service (DTS) を使用して、PolarDB-X 2.0 インスタンスから ApsaraDB for SelectDB インスタンスへデータを移行します。
この機能はグレースケールテスト段階であり、一部のユーザーのみご利用いただけます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
-
アウトバウンド帯域幅が最低 100 Mbit/s の PolarDB-X 2.0 インスタンス(ソース)
-
ソースインスタンスで
binlog_row_imageパラメーターをfullに設定すること(増分データ移行に必要)。詳細については、「パラメーター設定」をご参照ください。 -
両インスタンス上で必要な権限を持つデータベースアカウント(「必要な権限」を参照)
-
両方のインスタンスのセキュリティ設定に DTS サーバーの CIDR ブロックが追加されています。 詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
サポート対象外のオブジェクト
以下のオブジェクトタイプは移行できません。
-
名前に大文字を含むテーブル
-
INDEX、PARTITION、VIEW、PROCEDURE、FUNCTION、TRIGGER、および外部キー(FK)
-
TABLEGROUP オブジェクト
-
Locality 属性を含むデータベースまたはテーブル
-
PolarDB-X 2.0 Enterprise Edition の読み取り専用インスタンス
移行対象のテーブルには、PRIMARY KEY または UNIQUE 制約が必要であり、すべてのフィールドが一意である必要があります。これらの制約がない場合、宛先データベースに重複レコードが発生する可能性があります。
テーブルを移行対象として選択し、宛先でテーブル名またはカラム名を変更する必要がある場合、1 つのタスクでは最大 1,000 個のテーブルをサポートします。1,000 個を超えるテーブルを移行する場合は、複数のタスクを構成するか、データベース全体を一度に移行してください。
移行中の制限事項
移行タスク実行中は、以下の操作を実行しないでください。
-
ソースインスタンス上:スキーマ移行または完全なデータ移行中に、データベースまたはテーブルのスキーマを変更する DDL ステートメントを実行しないでください。実行すると、タスクが失敗します。
-
宛先インスタンス上:
-
ApsaraDB for SelectDB インスタンスでクラスターを作成します。これによりタスクが失敗した場合、移行インスタンスを再起動して再開します。
-
ApsaraDB for SelectDB データベースにバックエンドノードを追加します。これによりタスクが失敗した場合は、移行インスタンスを再起動して再開します。
-
DTS 実行中に、他のデータソースから宛先への書き込みを許可しないでください。これにより、データの不整合やタスクの失敗が発生する可能性があります。
-
-
DDL 制限:複数のカラムを一度に変更する DDL ステートメントや、同一テーブルに対して連続して実行される DDL ステートメントは実行しないでください。
SelectDB 固有の要件
-
データベースおよびテーブル名:英字で始める必要があります。該当しないオブジェクトは、オブジェクト名マッピング機能を使用して名前を変更してください。
-
漢字による名前:漢字で命名されたオブジェクトは、オブジェクト名マッピング機能(例:漢字から英語への変換)で名前を変更する必要があります。変更しないと、タスクが失敗する可能性があります。
-
VARCHAR 長さ:PolarDB-X 2.0 では
VARCHAR(M)は文字長を指定しますが、SelectDB ではVARCHAR(N)はバイト長を指定します。スキーマ移行をスキップする場合、SelectDB の VARCHAR フィールド長を、対応する PolarDB-X 2.0 のフィールド長の 4 倍に設定してください。 -
宛先テーブルエンジン:データは Unique エンジンテーブルまたは Duplicate エンジンテーブルにのみ移行可能です。「Unique エンジンテーブル」および「Duplicate エンジンテーブル」を以下でご確認ください。
Unique エンジンテーブル
宛先の Unique エンジンテーブル内のすべての一意キーは、ソーステーブルに存在し、かつ移行対象オブジェクトに含まれている必要があります。そうでない場合、データの不整合が発生する可能性があります。
Duplicate エンジンテーブル
宛先テーブルが Duplicate エンジンテーブルの場合、DTS は UPDATE および DELETE ステートメントを INSERT ステートメントに変換します。以下のシナリオで重複レコードが発生する可能性があります。
-
移行インスタンスが再試行または再起動された場合
-
移行インスタンス開始後に、同一データが DML 操作によって 2 回以上変更された場合
重複排除を行うには、DTS が自動的に作成する追加カラム:_is_deleted、_version、および _record_id を使用してください。「追加カラム」をご参照ください。
その他の注意事項
-
完全なデータ移行のパフォーマンス:完全なデータ移行では、両インスタンスの読み取りおよび書き込みリソースが使用されるため、データベース負荷が増加します。CPU 負荷が両インスタンスとも 30 % 未満となる非ピーク時間帯に移行を実行してください。
-
ストレージの断片化:完全なデータ移行では同時 INSERT 操作が使用されるため、宛先テーブルが断片化します。完全なデータ移行後、宛先テーブルはソーステーブルよりも多くのストレージ容量を占有します。
-
ハートビート書き込み:DTS は、ハートビートデータを書き込み、バイナリログ位置を進めるために、ソースインスタンスで定期的に
CREATE DATABASE IF NOT EXISTS \`test\`を実行します。転送および逆再生タスクのハートビートテーブルに対する SQL 操作の削除の有無 を はい に設定した場合、またはソースアカウントがデータベース作成権限を持たず、かつソースで長期間 DML 操作が実行されない場合、遅延情報が不正確になる可能性があります。遅延データを更新するには、ソースインスタンスで DML 操作を実行してください。 -
タスクの回復:DTS タスクが失敗した場合、DTS サポートは 8 時間以内に回復を試みます。回復中、タスクが再起動され、特定のタスクパラメーターが調整される場合があります。ただし、データベースパラメーターは変更されません。
課金
| 移行タイプ | タスク構成料金 | データ転送料金 |
|---|---|---|
| スキーマ移行と完全なデータ移行 | 無料 | アクセス方式が Alibaba Cloud インスタンスの場合、無料です。アクセス方式が パブリック IP アドレスの場合、料金が発生します。詳細については、「課金概要」をご参照ください。 |
| 増分データ移行 | 有料です。詳細については、「課金概要」をご参照ください。 | — |
増分移行でサポートされる SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | ADD COLUMN;DROP COLUMN;DROP TABLE;TRUNCATE TABLE;RENAME TABLE |
RENAME TABLE 操作はデータの不整合を引き起こす可能性があります。たとえば、テーブルを移行対象として選択した状態で移行中にそのテーブル名を変更すると、そのテーブルのデータは移行されません。これを回避するには、テーブルを含むデータベースを移行対象として選択し、名前変更前および名前変更後のデータベース名の両方を移行対象オブジェクトに含めてください。
必要な権限
| データベース | スキーマ移行 | 完全移行 | 増分移行 |
|---|---|---|---|
| ソース PolarDB-X 2.0 | SELECT | SELECT | REPLICATION SLAVE、REPLICATION CLIENT、および移行対象オブジェクトに対する SELECT |
| 宛先 ApsaraDB for SelectDB | Usage_priv(クラスターへのアクセス)、Select_priv、Load_priv、Alter_priv、Create_priv、Drop_priv | ||
アカウントの作成および権限付与手順については、以下をご参照ください。
PolarDB-X 2.0:「データベースアカウントの管理」および「データ同期時のアカウント権限」
ApsaraDB for SelectDB:「クラスターアクセス権限の管理」および「基本的な権限管理」
移行タスクの作成
ステップ 1:データ移行ページへ移動
以下のいずれかの方法を使用します。
DTS コンソール
DTS コンソール にログインします。
左側のナビゲーションウィンドウで、[データ移行] をクリックします。
画面左上隅で、移行インスタンスが配置されているリージョンを選択します。
DMS コンソール
実際の手順は、DMS コンソールのモードとレイアウトによって異なる場合があります。 詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
DMS コンソール にログインします。
上部ナビゲーションバーで、ポインターを [Data + AI] > [DTS (DTS)] > [Data Migration] の上に移動します。
データ移行タスク の右側にあるドロップダウンリストから、移行インスタンスが配置されているリージョンを選択します。
ステップ 2:ソースおよび宛先データベースの構成
[タスクの作成] をクリックします。
以下の表に記載されているパラメーターを構成します。
カテゴリ パラメーター 説明 該当なし [タスク名] DTS タスクの名前です。DTS がデフォルト名を生成しますが、タスクを容易に識別できるよう、意味のある名前を指定することを推奨します。名前は一意である必要はありません。 ソースデータベース [既存の接続を選択] ソースインスタンスが DTS に登録済みの場合は、ドロップダウンリストから選択してください。DTS が残りのパラメーターを自動入力します。登録されていない場合は、手動でパラメーターを構成してください。DMS コンソールでは、[DMS データベースインスタンスの選択] からインスタンスを選択します。 [データベースタイプ] [PolarDB-X 2.0] を選択します。 [アクセス方法] [Alibaba Cloud インスタンス] を選択します。 [インスタンスリージョン] ソース PolarDB-X 2.0 インスタンスが配置されているリージョンを選択します。 [Alibaba Cloud アカウント間でのデータ複製] ソースおよび宛先インスタンスが同一の Alibaba Cloud アカウントに属する場合は、[いいえ] を選択します。 [インスタンス ID] ソース PolarDB-X 2.0 インスタンスの ID を選択します。 [データベースアカウント] データベースアカウントを入力します。「必要な権限」で示す最小限の権限を確認してください。 [データベースパスワード] データベースアカウントのパスワードを入力します。 宛先データベース [既存の接続を選択] 宛先インスタンスが DTS に登録済みの場合は、ドロップダウンリストから選択してください。DTS が残りのパラメーターを自動入力します。登録されていない場合は、手動でパラメーターを構成してください。DMS コンソールでは、[DMS データベースインスタンスの選択] からインスタンスを選択します。 [データベースタイプ] [SelectDB] を選択します。 [アクセス方法] [Alibaba Cloud インスタンス] を選択します。 インスタンス リージョン 宛先 SelectDB インスタンスが配置されているリージョンを選択します。 [Alibaba Cloud アカウント間でのデータ複製] ソースおよび宛先インスタンスが同一の Alibaba Cloud アカウントに属する場合は、[いいえ] を選択します。 [インスタンス ID] 宛先 SelectDB インスタンスの ID を選択します。 [データベースアカウント] データベースアカウントを入力します。「必要な権限」で示す最小限の権限を確認してください。 [データベースパスワード] データベースアカウントのパスワードを入力します。 [接続性のテストと続行]をクリックします。
ステップ 3:移行オブジェクトの構成
[オブジェクトの構成] ページで、以下のパラメーターを設定します。
パラメーター 説明 [移行タイプ] 要件に基づいて移行タイプを選択します。- スキーマ移行 + 完全データ移行:既存のデータのみを移行します。移行中はソースに新しいデータを書き込まないでください。- スキーマ移行 + 完全データ移行 + 増分データ移行:既存のデータを移行し、進行中の変更と宛先を同期させ続けます。この組み合わせを使用すると、サービスの停止を最小限に抑えることができます。[スキーマ移行] をスキップする場合は、タスクを開始する前に、SelectDB で正しい構造を持つ Unique または Duplicate エンジンテーブルを作成する必要があります。詳細については、「データ型マッピング」、「追加列」、および「データモデル」をご参照ください。 [競合するテーブルの処理モード] - 事前チェックとエラー報告:宛先にソースと同じ名前のテーブルが含まれている場合、事前チェックは失敗します。競合を解決するには、オブジェクト名マッピングを使用して、移行するテーブルの名前を変更します。詳細については、「オブジェクト名のマッピング」をご参照ください。- エラーを無視して続行:同じテーブル名に対する事前チェックをスキップします。 警告これにより、データの不整合が発生する可能性があります。完全移行中、DTS は競合するレコードをスキップし、既存の宛先データを保持します。増分移行中、DTS は競合するレコードを上書きします。ソースと宛先のスキーマが異なる場合、一部の列のみが移行されるか、タスクが失敗する可能性があります。
[宛先インスタンスにおけるオブジェクト名の大文字/小文字の区別] 宛先のデータベース名、テーブル名、列名の大文字/小文字の区別ポリシーです。デフォルトは [DTS デフォルトポリシー]宛先インスタンスにおけるオブジェクト名の大文字と小文字の区別 です。詳細については、「」をご参照ください。 [ソースオブジェクト] 移行するデータベースまたはテーブルを選択し、
をクリックして [選択したオブジェクト] に移動します。[選択したオブジェクト] - 宛先のテーブル名を変更するには、テーブルを右クリックし、オブジェクト名マッピングのオプションを選択します。詳細については、「オブジェクト名のマッピング」をご参照ください。- 行をフィルターするには、テーブルを右クリックし、WHERE 条件を指定します。詳細については、「フィルター条件の指定」をご参照ください。- データベースまたはテーブルに特定の SQL 操作を選択するには、オブジェクトを右クリックし、含める操作を選択します。- [スキーマ移行] を選択した場合、移行オブジェクトとして選択できるのはテーブルのみ (データベースは不可) であり、 bucket_countパラメーターを設定する必要があります。テーブルを右クリックし、[パラメーター設定を有効にする] を有効にし、[値] を正の整数 (デフォルト: auto) に設定して、[OK] をクリックします。説明オブジェクト名マッピングでオブジェクトの名前を変更すると、依存オブジェクトの移行が失敗する可能性があります。
[次へ:高度な設定] をクリックし、以下のパラメーターを構成します。
パラメーター 説明 [タスクスケジューリング用の専用クラスター] デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。タスクの安定性を向上させるには、専用クラスターをご購入ください。「DTS 専用クラスターとは」をご参照ください。 [接続失敗時の再試行時間] タスク開始後に、DTS が接続失敗を再試行する時間です。有効範囲:10~1,440 分。デフォルト:720 分。30 分を超える値を設定してください。この期間内に DTS が再接続できた場合、タスクは再開されます。それ以外の場合は、タスクが失敗します。 説明複数のタスクが同一のソースまたは宛先を共有する場合、最も最近設定された再試行時間が優先されます。再試行中もインスタンスの課金が発生します。
[その他の問題発生時の再試行時間] DTS が失敗した DDL または DML 操作を再試行する時間です。有効範囲:1~1,440 分。デフォルト:10 分。10 分を超える値を設定してください。また、[接続失敗時の再試行時間] より短く設定する必要があります。 [完全なデータ移行のスロットリングの有効化] 完全移行中の読み取りおよび書き込みスループットを制限し、両インスタンスの負荷を軽減します。[ソースデータベースへのクエリ数/秒(QPS)]、[完全データ移行の RPS]、および [完全移行のデータ移行速度(MB/秒)] を構成します。[完全なデータ移行] を選択した場合のみ利用可能です。 [増分データ移行のスロットリングの有効化] 増分移行中のスループットを制限します。[増分データ移行の RPS] および [増分移行のデータ移行速度(MB/秒)] を構成します。[増分データ移行] を選択した場合のみ利用可能です。 [転送および逆再生タスクのハートビートテーブルに対する SQL 操作の削除の有無] DTS がソースインスタンスにハートビート SQL 操作を書き込むかどうかを制御します。- [はい]:DTS はハートビート操作を書き込みません。遅延情報が不正確になる可能性があります。- [いいえ]:DTS はハートビート操作を書き込みます。ソースの物理バックアップおよびクローン作成に影響を与える可能性があります。 [環境タグ] インスタンスを識別するための任意のタグです。 [ETL の構成] ETL (抽出·変換·書き出し) 機能を有効にするかどうかを指定します。詳細については、「ETL とは」および「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。 [モニタリングとアラート] タスクが失敗した場合や移行遅延がしきい値を超えた場合にアラートを受信するかどうか。[はい]を選択した場合は、アラートのしきい値と通知設定を構成します。「DTS タスクを作成するときにモニタリングとアラートを設定する」をご参照ください。 (任意)[次へ:データベースおよびテーブルフィールドの構成] をクリックします。各移行対象テーブルについて、[プライマリキー列]、[分散キー]、および [エンジン] を指定します。
- このステップは [スキーマ移行] を選択した場合のみ利用可能です。[定義ステータス] を [すべて] に設定すると、すべてのテーブルが表示されます。 - [プライマリキー列] は複数のカラムをサポートします。1 つ以上のプライマリキー列を [分散キー] としても選択できます。 - テーブルにプライマリキーまたは UNIQUE 制約がない場合、[エンジン] に [duplicate] を選択してください。選択しないと、タスクが失敗したりデータ損失が発生したりする可能性があります。
ステップ 4:事前チェックの実行
[次へ:タスク設定の保存と事前チェック] をクリックします。
続行する前に、この構成の API パラメーターをプレビューするには、[次へ:タスク設定の保存と事前チェック] 上にポインターを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
タスクは、事前チェックに合格した場合にのみ開始できます。
事前チェック項目が失敗した場合、失敗した項目の横にある [詳細の表示] をクリックし、問題を解決した後、[再チェック] をクリックしてください。
アラートがトリガーされた場合:無視できない場合は、解決して再チェックを行ってください。安全に無視できる場合は、[アラートの詳細の確認] をクリックし、ダイアログボックスで [無視] をクリックして確認し、[再チェック] をクリックしてください。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 5:インスタンスの購入および開始
成功率 が 100% に達するまで待ち、[次へ: インスタンスの購入] をクリックします。
[インスタンスの購入] ページで、インスタンスを構成します。
セクション パラメーター 説明 新しいインスタンスクラス リソースグループ 移行インスタンスのリソースグループです。デフォルトはデフォルトリソースグループです。詳細については、「Resource Management とは インスタンスクラス インスタンスクラスは移行速度を決定します。要件に基づいてクラスを選択してください。詳細については、「データ移行インスタンスのインスタンスクラス」をご参照ください。 [Data Transmission Service(従量課金)サービス利用規約] のチェックボックスをオンにします。
[購入および開始] をクリックし、確認ダイアログボックスで [OK] をクリックします。
タスクは [データ移行] ページに表示されます。ここから進行状況を追跡できます。
タスクに増分データ移行が含まれていない場合、完了時に自動的に停止します。[ステータス] は [完了] と表示されます。
タスクに増分データ移行が含まれている場合、継続的に実行されます。[ステータス] は [実行中] と表示されます。増分データ移行タスクは、自動的に停止または完了することはありません。
データ型マッピング
| カテゴリ | PolarDB-X 2.0 型 | SelectDB 型 |
|---|---|---|
| 数値 | TINYINT | TINYINT |
| TINYINT UNSIGNED | SMALLINT | |
| SMALLINT | SMALLINT | |
| SMALLINT UNSIGNED | INT | |
| MEDIUMINT | INT | |
| MEDIUMINT UNSIGNED | BIGINT | |
| INT | INT | |
| INT UNSIGNED | BIGINT | |
| BIGINT | BIGINT | |
| BIGINT UNSIGNED | LARGEINT | |
| BIT(M) | INT | |
| Decimal | Decimal( 説明 zerofill はサポートされていません) | |
| Numeric | Decimal | |
| Float | Float | |
| Double | DOUBLE | |
| BOOL / BOOLEAN | BOOLEAN | |
| 日付および時刻 | DATE | DATEV2 |
| DATETIME[(fsp)] | DATETIMEV2 | |
| Timestamp[(fsp)] | DATETIMEV2 | |
| Time[(fsp)] | VARCHAR | |
| YEAR[(4)] | INT | |
| 文字列 | CHAR / VARCHAR | VARCHAR |
| BINARY / VARBINARY | STRING | |
| TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT | STRING | |
| TINYBLOB / BLOB / MEDIUMBOLB / LONGBLOB | STRING | |
| ENUM | STRING | |
| SET | STRING | |
| JSON | STRING |
データ損失を回避するため、CHAR および VARCHAR(n) は SelectDB で VARCHAR(4*n) に変換されます。
長さが指定されていない場合は、SelectDB のデフォルト値 VARCHAR(65533) が使用されます。
長さが 65533 を超える場合は、データは STRING に変換されます。
追加カラム
DTS は、Duplicate エンジンテーブルに以下のカラムを自動的に作成します(または手動で追加できます)。
| カラム | 型 | デフォルト値 | 説明 |
|---|---|---|---|
_is_deleted | Int | 0 | レコードが削除済みかどうかを示します。INSERT および UPDATE 操作では 0、DELETE 操作では 1 に設定されます。 |
_version | Bigint | 0 | 完全なデータ移行中は 0 に設定されます。増分移行中は、ソースのバイナリログファイルからのタイムスタンプ(秒単位)が格納されます。 |
_record_id | Bigint | 0 | 完全なデータ移行中は 0 に設定されます。増分移行中は、増分ログエントリの固有 ID が格納されます。ID は、各新しいログエントリで自動インクリメントされます。 |