Data Transmission Service (DTS) は、PolarDB for MySQL クラスターから SelectDB インスタンスへデータを同期することで、運用データのリアルタイム分析を可能にします。SelectDB は、大規模なスケールでサブ秒のクエリ応答を実現し、1 秒あたり最大 10,000 件のポイントクエリを処理できるほか、高スループットの複雑な分析をサポートします。
前提条件
開始する前に、以下をご確認ください:
SelectDB インスタンスの利用可能なストレージ領域が、ソース PolarDB for MySQL クラスターの使用領域よりも大きいこと。インスタンスを作成するには、「インスタンスの作成」をご参照ください。
ソース PolarDB for MySQL クラスターでバイナリロギングが有効になっており、
loose_polar_log_binパラメーターがONに設定されていること。そうでない場合、事前チェック中にエラーメッセージが返され、DTS タスクを開始できません。「バイナリロギングの有効化」および「パラメーターの変更」をご参照ください。ソースクラスターで、バイナリログの保持期間が 3 日以上 (7 日を推奨します) に設定されていること。例外的な状況では、データの不整合や損失が発生する可能性があります。上記の要件に基づいてバイナリログの保持期間を設定してください。そうでない場合、Data Transmission Service (DTS) のサービスレベルアグリーメント (SLA) で定められたサービスの信頼性やパフォーマンスが保証されない場合があります。「保持期間の変更」をご参照ください。
ソースデータベースとターゲットデータベースの両方で、必要な権限を持つデータベースアカウントがあること。「データベースアカウントに必要な権限」をご参照ください。
PolarDB for MySQL クラスターでバイナリロギングを有効にすると、バイナリログ領域のストレージ料金が発生します。
Limitations
Source database
Tables with primary keys or unique constraints: all fields in the destination must be unique; otherwise, the destination may contain duplicate data.
Tables without primary keys or unique constraints: select [Schema Synchronization] for Synchronization Types and duplicate for Engine in the Configurations for Databases, Tables, and Columns step.
When selecting tables (not entire databases) as synchronization objects, a single task supports up to 1,000 tables. For more than 1,000 tables, configure multiple tasks or synchronize at the database level.
Do not perform Data Definition Language (DDL) operations that change schemas during initial schema synchronization or initial full data synchronization. During full data synchronization, DTS queries the source database, which creates metadata locks that may block DDL operations.
Data changes not recorded in binary logs — such as data restored from a physical backup or generated by cascade operations — are not synchronized to the destination. If this occurs, remove the affected database or table from the synchronization objects and add it back. See Modify synchronization objects.
Unsupported objects and operations
Read-only nodes of the source PolarDB for MySQL cluster are not synchronized.
OSS external tables from the source cluster are not synchronized.
INDEX, PARTITION, VIEW, PROCEDURE, FUNCTION, TRIGGER, and FK are not synchronized.
Primary/secondary switchover is not supported during full synchronization. If a switchover occurs, reconfigure the task.
You cannot modify DDL on multiple columns at a time or modify DDL on the same table consecutively.
Online DDL changes using pt-online-schema-change are not supported. If such changes exist on the source, data loss may occur or the synchronization instance may fail.
Synchronization of VECTOR type data is not supported.
Destination constraints
Only the Unique Key model and the Duplicate Key model are supported in the destination SelectDB instance.
Database and table names in SelectDB must start with a letter. Use the object name mapping feature to rename any that do not.
If a database, table, or column name contains Chinese characters, use the object name mapping feature to rename it (for example, rename it to an English equivalent). Otherwise, the task may fail.
Do not create clusters in the destination SelectDB instance during synchronization. If the task fails because of this, restart the data synchronization instance to resume.
Do not add backend nodes to the destination SelectDB instance during synchronization. If the task fails because of this, restart the data synchronization instance to resume.
Only the
bucket_countparameter can be specified in the [Selected Objects] section. The value must be a positive integer. Default: auto.In multi-table merge scenarios where data from multiple source tables is synchronized to the same destination table, all source tables must have the same schema. Mismatched schemas may cause data inconsistency or task failure.
In PolarDB for MySQL,
MinVARCHAR(M)represents character length. In SelectDB,NinVARCHAR(N)represents byte length. If you are not using DTS schema synchronization, set SelectDB VARCHAR field lengths to four times the corresponding PolarDB for MySQL VARCHAR field lengths.When using DMS or gh-ost to perform online DDL changes on the source, DTS synchronizes only the original DDL to the destination. This may cause table locks at the destination.
If data is written to the destination database from sources other than DTS during synchronization, data inconsistency may occur.
DTS executes
CREATE DATABASE IF NOT EXISTS \test\ in the source database at scheduled intervals to advance the binary log position.During incremental synchronization, DTS uses a batch strategy that writes data for each synchronization object at most once every 5 seconds. This results in a normal synchronization latency of less than 10 seconds. To reduce this latency, adjust the
selectdb.reservoir.timeout.millisecondsparameter in the DTS console. The allowed range is 1,000–10,000 milliseconds. Lower values increase write frequency, which may increase the load and response time (RT) of the destination.If a DTS instance fails, the DTS helpdesk attempts recovery within 8 hours. During recovery, the instance may be restarted or its parameters adjusted. For parameters that may be modified, see Modify instance parameters.
Before synchronizing data, evaluate the performance of both databases and run synchronization during off-peak hours. Initial full data synchronization runs concurrent INSERT operations, which increases the load on both databases and causes table fragmentation in the destination, resulting in a larger tablespace than in the source.
Unique Key model
All unique keys in the destination table must exist in the source table and be included in the synchronization objects. Otherwise, data inconsistency may occur.
Duplicate Key model
Duplicate data may appear in the destination if any of the following occurs:
A retry operation in a data synchronization instance
Two or more Data Manipulation Language (DML) operations on the same row after the synchronization instance starts
To deduplicate data, use the additional columns _is_deleted, _version, and _record_id. For column details, see Additional column information.
For Duplicate Key model tables, DTS converts UPDATE and DELETE statements to INSERT statements.
課金
同期タイプ | タスク設定料金 |
スキーマ同期および完全データ同期 | 無料です。 |
増分同期 | 有料です。詳細については「課金概要」をご参照ください。 |
増分同期でサポートされる SQL 操作
操作タイプ | SQL ステートメント |
DML | INSERT、UPDATE、DELETE |
DDL | ADD COLUMN、MODIFY COLUMN、CHANGE COLUMN、DROP COLUMN、DROP TABLE、TRUNCATE TABLE、RENAME TABLE |
RENAME TABLE 操作は、データの不整合を引き起こす可能性があります。同期中にテーブルの名前を変更し、 (データベース全体ではなく) テーブルのみを同期オブジェクトとして選択していた場合、名前変更後のテーブルのデータは同期されません。これを防ぐには、データベースを同期オブジェクトとして選択し、元のテーブルと名前変更後のテーブルの両方を含むデータベースが同期オブジェクトになっていることを確認してください。
データベースアカウントに必要な権限
データベース | 必要な権限 | 設定方法 |
ソース: PolarDB for MySQL | 同期対象のオブジェクトに対する読み取りおよび書き込み権限 | |
デスティネーション: SelectDB | クラスターに対する USAGE_PRIV、データベースに対する SELECT_PRIV、LOAD_PRIV、ALTER_PRIV、CREATE_PRIV、および DROP_PRIV |
データ同期タスクの作成
ステップ1:データ同期ページへの移動
次のいずれかの方法で、データ同期ページを開きます。
DTS コンソール
DTS コンソールにログインします。
左側のナビゲーションウィンドウで、[データ同期] をクリックします。
左上隅で、データ同期インスタンスが配置されているリージョンを選択します。
Data Management (DMS) コンソール
DMS コンソールのモードとレイアウトによって、ナビゲーションパスが異なる場合があります。詳細は、「シンプルモード」および「DMSコンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
DMS コンソールにログインします。
上部のメニューバーで [データ + AI] にポインターを合わせ、[DTS (DTS)] > [データ同期] を選択します。
[データ同期タスク] の右側にあるドロップダウンリストから、インスタンスのリージョンを選択します。
ステップ2:ソースデータベースとターゲットデータベースの設定
[タスクの作成] をクリックします。
タスク名とソースデータベースを設定します。
パラメーター
説明
[タスク名]
Data Transmission Service (DTS) は自動的に名前を生成します。タスクを識別しやすくするために、分かりやすい名前を指定します。名前は一意である必要はありません。
[既存の接続を選択] (ソース)
ソースインスタンスが DTS に登録されている場合は、リストから選択します。DTS が接続パラメーターを自動的に入力します。登録されていない場合は、パラメーターを手動で設定します。詳細は、「データベース接続の管理」をご参照ください。
[データベースタイプ]
[PolarDB for MySQL] を選択します。
[アクセス方法]
[Alibaba Cloud インスタンス] を選択します。
[インスタンスリージョン]
ソースの PolarDB for MySQL クラスターがあるリージョンを選択します。
[Alibaba Cloudアカウント間のデータ同期]
同じ Alibaba Cloud アカウント内で同期するには、[いいえ] を選択します。
[PolarDBクラスターID]
ソースの PolarDB for MySQL クラスターの ID を選択します。
[データベースアカウント]
ソースクラスターのアカウントを入力します。詳細は、「データベースアカウントに必要な権限」をご参照ください。
[データベースパスワード]
データベースアカウントのパスワードを入力します。
[暗号化]
必要に応じて暗号化方法を選択します。Secure Sockets Layer (SSL) 暗号化については、「SSL暗号化の設定」をご参照ください。
ターゲットデータベースを設定します。
パラメーター
説明
[既存の接続を選択] (ターゲット)
ターゲットインスタンスが DTS に登録されている場合は、リストから選択します。DTS が接続パラメーターを自動的に入力します。登録されていない場合は、パラメーターを手動で設定します。詳細は、「データベース接続の管理」をご参照ください。
[データベースタイプ]
[SelectDB] を選択します。
[アクセス方法]
[Alibaba Cloud インスタンス] を選択します。
[インスタンスリージョン]
ターゲットの SelectDB インスタンスがあるリージョンを選択します。
[Alibaba Cloudアカウント間のデータ同期]
同じ Alibaba Cloud アカウント内で同期するには、[いいえ] を選択します。
[インスタンス ID]
ターゲットの SelectDB インスタンスの ID を選択します。
[データベースアカウント]
ターゲットインスタンスのアカウントを入力します。詳細は、「データベースアカウントに必要な権限」をご参照ください。
[データベースパスワード]
データベースアカウントのパスワードを入力します。
[接続をテストして続行] をクリックします。
DTS サーバーの CIDR ブロックは、ソースデータベースとターゲットデータベース両方のセキュリティ設定に追加する必要があります。DTS によって自動で追加するか、手動で追加できます。詳細は、「DTSサーバーのIPアドレスをホワイトリストに追加」をご参照ください。ソースデータベースまたはターゲットデータベースの [アクセス方法] が [Alibaba Cloud インスタンス] でない場合は、[DTSサーバーのCIDRブロック] ダイアログボックスで [接続のテスト] をクリックします。
ステップ3:同期オブジェクトの設定
[オブジェクトの設定] ステップで、次のパラメーターを設定します。
パラメーター
説明
[同期タイプ]
デフォルトでは、[増分データ同期] が選択されています。[スキーマ同期] と [完全データ同期] も選択します。事前チェック後、DTS は後続の増分同期の基礎として、ソースからターゲットに既存データを同期します。
[競合テーブルの処理モード]
[事前チェックとエラー報告]:ターゲットに同じ名前のテーブルがあるかどうかをチェックします。競合がある場合、事前チェック中にエラーが報告され、タスクは開始されません。ターゲットテーブルを削除または名前変更せずに競合を解決するには、オブジェクト名マッピング機能を使用してください。詳細は、「データベース、テーブル、および列名のマッピング」をご参照ください。[エラーを無視して続行]:チェックをスキップします。
警告この場合、データの不整合が発生する可能性があります。スキーマが一致する場合、DTS は同じプライマリキーまたは一意キーを持つターゲットレコードを上書きします。スキーマが異なる場合、データ初期化が失敗したり、一部の列のみが同期されたりする可能性があります。
[ターゲットインスタンスのオブジェクト名の大文字/小文字]
ターゲットのデータベース、テーブル、列名の大文字/小文字を制御します。デフォルト:[DTS デフォルトポリシー]。詳細は、「ターゲットインスタンスのオブジェクト名の大文字/小文字の指定」をご参照ください。
[ソースオブジェクト]
1 つ以上のオブジェクトを選択し、
アイコンをクリックして [選択済みオブジェクト] に移動します。データベースまたはテーブルを選択できます。[選択済みオブジェクト]
同期オブジェクトの名前を変更するには、そのオブジェクトを右クリックします。詳細は、「単一オブジェクト名のマッピング」をご参照ください。[スキーマ同期] が選択されている場合、[選択済みオブジェクト] でテーブルを右クリックし、[パラメーター設定を有効にする] を [はい] に設定し、
bucket_countの値を指定して、[OK] をクリックします。特定のオブジェクトの SQL 操作または行をフィルタリングするには、そのオブジェクトを右クリックしてオプションを設定します。行フィルタリングについては、「フィルタリング条件の指定」をご参照ください。説明オブジェクト名マッピング機能でオブジェクトの名前を変更すると、依存するオブジェクトの同期が失敗する可能性があります。
[次へ: 詳細設定] をクリックし、次のパラメーターを設定します。
パラメーター
説明
[タスクスケジューリング用の専用クラスター]
デフォルトでは、タスクは共有クラスターにスケジュールされます。より高い安定性を求める場合は、専用クラスターを購入してください。詳細は、「DTS 専用クラスターとは」をご参照ください。
[接続失敗時の再試行時間]
タスク開始後にソースまたはターゲットデータベースの接続が失敗した場合に DTS が再試行する期間です。有効範囲:10~1,440 分。デフォルト:720 分。30 分以上の値を設定してください。再試行期間内に DTS が再接続した場合、タスクは再開されます。そうでない場合、タスクは失敗します。
説明複数のタスクが同じソースまたはターゲットデータベースを共有する場合、最も短い再試行時間が優先されます。再試行期間中も DTS 料金が適用されます。
[その他の問題に対する再試行時間]
失敗した DDL または DML 操作を DTS が再試行する期間です。有効範囲:1~1,440 分。デフォルト:10 分。10 分以上の値を設定してください。この値は [接続失敗時の再試行時間] よりも小さくする必要があります。
[完全データ同期のスロットリングを有効にする]
完全データ同期中の読み取り/書き込みリソース使用量を制限します。有効にした場合、[ソースデータベースへの 1 秒あたりのクエリ数 (QPS)]、[完全データ同期のRPS]、および[完全同期のデータ同期速度 (MB/s)] を設定します。[完全データ同期] が選択されている場合にのみ利用可能です。
[増分データ同期のスロットリングを有効にする]
増分同期中のリソース使用量を制限します。有効にした場合、[増分データ同期のRPS] と [増分同期のデータ同期速度 (MB/s)] を設定します。
[環境タグ]
オプションで、インスタンスを識別するためのタグを選択します。
[順方向および逆方向タスクのハートビートテーブルに対するSQL操作を削除するかどうか]
DTS がハートビートテーブルの SQL 操作をソースデータベースに書き込むかどうかを制御します。[はい]:ハートビート操作を書き込みません (DTS インスタンスで遅延が表示される場合があります)。[いいえ]:ハートビート操作を書き込みます (ソースデータベースの物理バックアップやクローニングなどの機能に影響を与える可能性があります)。
[ETLの設定]
抽出、変換、ロード (ETL) 機能を有効にします。詳細は、「ETL とは」をご参照ください。[はい]:データ処理ステートメントで ETL を設定します。詳細は、「データ移行またはデータ同期タスクでのETLの設定」をご参照ください。[いいえ]:ETL 設定をスキップします。
[モニタリングとアラート]
タスクの失敗や同期レイテンシがしきい値を超えた場合にアラートを設定します。[はい]:アラートのしきい値と通知設定を行います。詳細は、「DTS タスク作成時のモニタリングとアラートの設定」をご参照ください。[いいえ]:アラートは無効になります。
(オプション) [次へ: データベースとテーブルフィールドの設定] をクリックします。ダイアログボックスで、同期するテーブルの [プライマリキー列]、[分散キー]、および [エンジン] を指定します。
このステップは、[スキーマ同期] が選択されている場合にのみ利用可能です。[定義ステータス] を [すべて] に設定すると、すべてのテーブルを表示して変更できます。[プライマリキー列] には複数の列を選択できます。それらの列のうち 1 つ以上を [分散キー] に使用できます。プライマリキーや一意性制約のないテーブルでは、[エンジン] に [duplicate] を選択してください。そうでない場合、タスクが失敗したり、データが失われたりする可能性があります。
ステップ4:事前チェックの実行
[次へ: タスク設定を保存して事前チェック] をクリックします。このタスク設定の API パラメーターをプレビューするには、ボタンにポインターを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
事前チェックが完了するまで待ちます。
事前チェックが失敗した場合は、失敗した各項目の横にある [詳細の表示] をクリックして問題を解決し、[再度事前チェック] をクリックします。
アラートがトリガーされた場合:
無視できないアラートの場合は、[詳細の表示] をクリックして問題を解決し、再度事前チェックを実行します。
無視できるアラートの場合は、[アラート詳細の確認] をクリックし、ダイアログボックスで [無視] をクリックし、[OK] をクリックしてから、[再度事前チェック] をクリックします。アラートを無視すると、データの不整合が発生する可能性があります。
タスクは事前チェックに合格するまで開始できません。
ステップ5:インスタンスの購入と開始
[成功率] が [100%] に達するまで待ってから、[次へ: インスタンスの購入] をクリックします。
[購入] ページで、次のパラメーターを設定します。
パラメーター
説明
[課金方法]
[サブスクリプション]:固定期間分を前払いします。長期利用に適しています。[従量課金]:時間単位で課金されます。短期利用に適しています。不要になったインスタンスをリリースして、課金を停止します。
[リソースグループ設定]
インスタンスを所属させるリソースグループです。デフォルト:[デフォルトリソースグループ]。詳細は、「リソース管理とは」をご参照ください。
[インスタンスクラス]
同期速度の要件に基づいてクラスを選択します。詳細は、「データ同期インスタンスのインスタンスクラス」をご参照ください。
[サブスクリプション期間]
[サブスクリプション] 課金方法でのみ利用可能です。1~9 か月、1 年、2 年、3 年、または 5 年から選択します。
[Data Transmission Service (従量課金) 利用規約] を読んで選択します。
[購入して開始] をクリックし、ダイアログボックスで [OK] をクリックします。
タスクがタスクリストに表示されます。そこで進行状況を監視できます。
データ型のマッピング
カテゴリ | PolarDB for MySQL の型 | SelectDB の型 | 備考 |
数値 | TINYINT | TINYINT | |
TINYINT UNSIGNED | SMALLINT | ||
SMALLINT | SMALLINT | ||
SMALLINT UNSIGNED | INT | ||
MEDIUMINT | INT | ||
MEDIUMINT UNSIGNED | INT | ||
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 | ||
YEAR[(4)] | INT | ||
文字列 | CHAR, VARCHAR | VARCHAR | データ損失を防ぐため、CHAR および VARCHAR(n) の値は SelectDB の VARCHAR(4*n) に変換されます。長さが指定されていない場合は、デフォルトでは VARCHAR(65533) が使用されます。変換後の長さ (4*n) が 65,533 を超える場合、値は STRING に変換されます。 |
BINARY, VARBINARY | STRING | ||
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT | STRING | ||
TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB | STRING | ||
ENUM | STRING | ||
SET | STRING | ||
JSON | STRING |
追加カラム情報
Duplicate Key モデルのテーブルに同期する場合、Data Transmission Service (DTS) は次のカラムを自動的に追加するか、手動で追加する必要があります。
名前 | データ型 | デフォルト値 | 説明 |
| Int | 0 | 行が削除されているかどうかを示します。INSERT および UPDATE 操作では、この値は [0] に設定されます。DELETE 操作では、この値は [1] に設定されます。 |
| Bigint | 0 | 完全同期データの場合: 0。増分同期データの場合: ソースのバイナリログから取得した UNIX タイムスタンプ (秒単位)。 |
| Bigint | 0 | 完全同期データの場合: 0。増分同期データの場合: 増分ログから取得した一意のレコード ID。この値は一意で、単調増加します。 |