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