Data Transmission Service (DTS) を使用して、PolarDB for MySQL クラスターからセルフマネージドの Doris データベースへ、大規模分析のためにデータを継続的に同期できます。このトピックでは、Elastic Compute Service (ECS) インスタンス上の Doris データベースを使用したセットアップ手順について説明します。
前提条件
開始する前に、以下を確認してください。
ターゲット Doris データベースの空き容量が、ソース PolarDB for MySQL クラスターの使用容量より大きいこと
ソースの PolarDB for MySQL クラスターでバイナリロギングが有効化され、
loose_polar_log_binパラメーターがONに設定されています。「バイナリロギングを有効にする」および「パラメーターを変更する」をご参照ください。バイナリログの保持期間が少なくとも 3 日間 (7 日間を推奨) であること
必要な権限を持つデータベースアカウント (必要な権限をご参照ください)
PolarDB for MySQL クラスターでバイナリロギングを有効にすると、バイナリログファイルのストレージ料金が発生します。
サポートされているソースおよびターゲットデータベースのバージョンについては、「データ同期ソリューションの概要」をご参照ください。
必要な権限
データベース | 必要な権限 | 参照 |
ソース PolarDB for MySQL クラスター | 同期するオブジェクトの読み書き権限 | |
ターゲット Doris データベース | USAGE_PRIV および次の権限: SELECT_PRIV、LOAD_PRIV、ALTER_PRIV、CREATE_PRIV、DROP_PRIV |
課金
同期タイプ | コスト |
スキーマ同期と全量データ同期 | 無料 |
増分データ同期 | 有料 (課金概要を参照) |
増分同期でサポートされる SQL 操作
操作タイプ | ステートメント |
データ操作言語 (DML) | INSERT、UPDATE、DELETE |
データ定義言語 (DDL) | ADD COLUMN、MODIFY COLUMN、CHANGE COLUMN、DROP COLUMN、DROP TABLE、TRUNCATE TABLE、RENAME TABLE |
RENAME TABLE 操作は、データの不整合を引き起こす可能性があります。同期対象のテーブルの名前を変更すると、そのデータはターゲットに同期されなくなります。これを回避するには、個々のテーブルではなくデータベース全体を同期対象として選択し、元のテーブルと名前変更後のテーブルの両方が、同期範囲内のデータベースに含まれていることを確認してください。
制限事項
ソースデータベース
PRIMARY KEY または UNIQUE 制約を持つテーブルの場合、すべてのフィールドが一意でなければ、移行先に重複データが含まれる可能性があります。
PRIMARY KEY または UNIQUE 制約がないテーブルについては、[データベース、テーブル、および列の設定] ステップで、[同期タイプ] に [スキーマ同期] を、[エンジン] に [duplicate] を選択します。
同期オブジェクトとしてテーブル (データベースではない) を選択し、ターゲットでテーブルまたは列の名前を変更する必要がある場合、単一のタスクでサポートされるテーブルは最大 1,000 です。この制限を超えると、リクエストエラーが発生します。代わりに、複数のタスクを設定するか、データベース全体を同期してください。
バイナリログの要件:
loose_polar_log_binはONに設定する必要があります保持期間:3 日以上 (7 日間を推奨)
初期スキーマ同期または初期フルデータ同期中に、データベースまたはテーブルのスキーマを変更する DDL 操作を実行しないでください。DTS はフル同期中にソースデータベースにクエリを実行するため、DDL 操作をブロックする可能性のあるメタデータロックが作成されます。
物理バックアップから復元されたデータやカスケード操作によって生成されたデータなど、バイナリログに記録されない操作による変更は、ターゲットに同期されません。これが発生した場合、業務上許容されるのであれば、影響を受けるデータベースまたはテーブルを同期オブジェクトから削除して再追加できます。詳細については、「同期オブジェクトの変更」をご参照ください。
一般的な制限事項
DTS は、ソース PolarDB for MySQL クラスターの読み取り専用ノードを同期しません。
DTS は、ソースの Object Storage Service (OSS) 外部テーブルを同期しません。
初期フルデータ同期中のプライマリ/スタンバイ切り替えはサポートされていません。切り替えが発生した場合は、同期タスクを再設定してください。
Doris では、Unique Key Model または Duplicate Key Model を使用するテーブルのみがサポートされています。Duplicate Key Model を使用する場合、DTS は UPDATE および DELETE ステートメントを INSERT ステートメントに変換するため、重複データが発生する可能性があります。必要に応じて、追加の列
_is_deleted、_version、および_record_idを使用して重複排除を行います (詳細はDTS によって追加された列をご参照ください)。データ同期インスタンスで再試行操作が実行される
インスタンスが再起動される
インスタンスの起動後、同じ行に 2 つ以上の DML 操作が適用される
[選択したオブジェクト] セクションでは、
bucket_countパラメーターのみ指定できます。値は正の整数でなければなりません。デフォルト: [auto]。同期中にターゲットの Doris データベースにクラスターを作成しないでください。これが発生した場合、タスクは失敗します。データ同期インスタンスを再起動して再開してください。
Doris は、文字で始まるデータベース名とテーブル名のみをサポートします。オブジェクト名マッピング機能を使用して、文字以外で始まるオブジェクトの名前を変更してください。
データベース、テーブル、または列の名前に漢字が含まれている場合は、オブジェクト名マッピングを使用して名前を変更してください (例:英語名)。そうしないと、タスクが失敗する可能性があります。
一度に複数の列を変更する DDL 操作を実行したり、1 つのテーブルに対して DDL 操作を連続して実行したりすることはできません。
同期中にターゲットの Doris データベースにバックエンド (BE) ノードを追加しないでください。これが発生した場合、タスクは失敗します。データ同期インスタンスを再起動して再開してください。
複数テーブルのマージシナリオ (複数のソーステーブルを 1 つのターゲットテーブルに同期する) では、すべてのソーステーブルのスキーマが同一である必要があります。そうでない場合、データの不整合またはタスクの失敗が発生する可能性があります。
PolarDB for MySQL の
VARCHAR(M)では M は文字長を表しますが、Doris のVARCHAR(N)では N はバイト長を表します。スキーマ同期を使用しない場合は、データ損失を避けるために、Doris の VARCHAR 長を対応する MySQL の VARCHAR 長の 4 倍に設定してください。DMSまたはgh-ostを使用してソースでオンライン DDL 変更を実行する場合、DTS は元の DDL のみをターゲットに同期します。pt-online-schema-changeによるオンライン DDL 変更はサポートされておらず、データ損失や同期の失敗につながる可能性があります。初期フルデータ同期中、DTS は両方のデータベースの読み取りおよび書き込みリソースを使用します。事前にパフォーマンスへの影響を評価し、両データベースの CPU 使用率が 30% 未満であるオフピーク時に同期をスケジュールしてください。
初期フルデータ同期中の同時 INSERT 操作は、ターゲットテーブルで断片化を引き起こします。フル同期が完了した後、ターゲットテーブルがソーステーブルよりも多くのストレージを占有する可能性があります。
同期中は、同期オブジェクトに対して
pt-online-schema-changeなどのツールによるオンライン DDL 操作を実行しないでください。同期失敗の原因となります。同期中に DTS 以外のソースからターゲットデータベースにデータが書き込まれると、ソースとターゲットの間でデータの不整合が発生する可能性があります。
DTS は、バイナリログの位置を進めるために、ソースで定期的に
CREATE DATABASE IF NOT EXISTS \testを実行します。増分同期中、DTS はバッチ戦略を使用し、各同期オブジェクトに 5 秒ごとに最大 1 回書き込みます。これにより、10 秒未満の通常の同期レイテンシーが発生する可能性があります。レイテンシーを短縮するには、DTS コンソールで
selectdb.reservoir.timeout.millisecondsパラメーター (範囲: 1,000~10,000 ミリ秒) を調整します。バッチ間隔を短くすると書き込み頻度が増加し、宛先の負荷と応答時間が増加する可能性があります。インスタンスに障害が発生した場合、DTS サポートは 8 時間以内に復旧を試みます。復旧中、インスタンスが再起動されたり、そのパラメーターが調整されたりすることがあります。変更されるのは DTS インスタンスのパラメーターのみで、データベースのパラメーターは変更されません。
VECTOR型データの同期はサポートされていません。
データ同期タスクの作成
手順1:データ同期ページへの移動
次のいずれかの方法を使用します。
DTS コンソール
左側のナビゲーションペインで、[データ同期] をクリックします。
左上隅で、データ同期タスクが存在するリージョンを選択します。
DMS コンソール
手順は、Data Management (DMS) コンソールのモードとレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
手順2:ソースデータベースと宛先データベースの設定
[タスク作成] をクリックします。
[タスク名] を設定します。DTS により名前が自動生成されます。タスクを識別しやすくするために、わかりやすい名前を指定してください。一意の名前である必要はありません。
以下のパラメーターを使用して、ソースデータベースと宛先データベースの接続を設定します。
ソースデータベース (PolarDB for MySQL)
パラメーター | 値 |
[既存の接続を選択] | リストから登録済みのインスタンスを選択して次のフィールドに自動入力するか、手動で設定します |
[データベースタイプ] | PolarDB for MySQL |
[アクセス方法] | Alibaba Cloud インスタンス |
[インスタンスリージョン] | ソースの PolarDB for MySQL クラスターが存在するリージョン |
[Alibaba Cloud アカウント間のデータ複製] | いいえ (この例では現在のアカウントを使用します) |
[PolarDB クラスター ID] | ソースの PolarDB for MySQL クラスターの ID |
[データベースアカウント] | ソースクラスターのアカウント (詳細については、「必要な権限」をご参照ください) |
[データベースパスワード] | データベースアカウントのパスワード |
[暗号化] | 必要に応じて選択してください。SSL 設定については、「SSL暗号化の設定」をご参照ください |
宛先データベース (Doris)
パラメーター | 値 |
[既存の接続を選択] | リストから登録済みのインスタンスを選択して次のフィールドに自動入力するか、手動で設定します |
[データベースタイプ] | Doris |
[アクセス方法] | ECS 上の自己管理型データベース (この例)。その他のアクセス方法については、「準備」をご参照ください |
[インスタンスリージョン] | 宛先の Doris データベースが存在するリージョン |
[ECS インスタンス ID] | Doris データベースを実行している ECS インスタンスの ID。BE またはフロントエンド (FE) ノードが別々の ECS インスタンス上にある場合は、DTS サーバーの CIDR ブロックを各インスタンスのセキュリティルールに追加してください |
[ポート番号] | 接続先の Doris データベースのサービスポート。デフォルト: [9030] |
[データベースアカウント] | 宛先データベースのアカウント (詳細については、「必要な権限」をご参照ください) |
[データベースパスワード] | データベースアカウントのパスワード |
[接続性をテストして続行] をクリックします。[DTS サーバーの CIDR ブロック] ダイアログボックスで、[接続性のテスト] をクリックします。
DTS サーバーの CIDR ブロックが、ソースデータベースと宛先データベースの両方のセキュリティ設定に追加されていることを確認してください。詳細については、「ホワイトリストへのDTSサーバーのIPアドレスの追加」をご参照ください。
手順3:同期オブジェクトの選択
[オブジェクトの構成] ステップでは、以下を設定します:
パラメーター | 説明 |
[同期タイプ] | [スキーマ同期]、[完全データ同期]、および [増分データ同期] を選択します。 完全同期は、増分同期が開始される前にベースラインデータを確立します。 スキーマ同期をスキップする場合は、事前に Unique Key Model または Duplicate Key Model を使用して宛先テーブルを作成します。 データ型のマッピング、DTS によって追加される列、およびUnique Key Modelをご参照ください。 |
[競合テーブルの処理モード] | [事前チェックとエラー報告]: 移行先に同じ名前のテーブルが存在する場合、エラーを報告します。 [エラーを無視して続行]: チェックをスキップします。テーブルスキーマが異なる場合、データ初期化が失敗するか、一部の列のみが同期される可能性があります。スキーマが同じ場合、ソースデータは、一致するプライマリキーまたは一意キーを持つ移行先のレコードを上書きします。 |
[宛先インスタンスでのオブジェクト名の大文字化] | デフォルトは [DTS デフォルトポリシー] です。必要に応じて調整してください。 詳細については、「オブジェクト名の大文字と小文字の区別を指定する」をご参照ください。 |
[ソースオブジェクト] | 同期するデータベースまたはテーブルを選択し、右矢印アイコンをクリックして[選択したオブジェクト]に追加します。 |
[選択されたオブジェクト] | オブジェクトを右クリックして、名前の変更、WHERE 条件を使用したデータのフィルタリング、または特定の SQL 操作の選択を行います。スキーマ同期が有効になっている場合は、テーブルを右クリックし、[パラメーター設定] で |
[次へ: 詳細設定] をクリックし、以下を設定します。
パラメーター | 説明 |
[タスクスケジューリング専用クラスター] | デフォルトでは、DTS は共有クラスターを使用します。より高い安定性を得るには、専用クラスターを購入してください。詳細については、「DTS専用クラスターとは」をご参照ください |
[接続失敗時の再試行時間] | 接続失敗後に DTS が再試行する時間。範囲:10~1,440 分。デフォルト:720。30 以上に設定してください。この期間内に再接続が成功すると同期が再開されます。それ以外の場合、タスクは失敗します。同じソースまたは宛先を共有するタスク間で最も短い値が適用されます |
[その他の問題の再試行時間] | DDL または DML の失敗後に DTS が再試行する期間。 範囲: 1~1,440 分。 デフォルト: 10。 10 以上、かつ [接続失敗時の再試行時間] 未満である必要があります。 |
[全データ同期時のスロットリングを有効化] | ソースへの QPS (秒間クエリ数)、フル移行の RPS (秒間行数)、およびデータ移行速度を設定することで、フル同期をスロットリングできます ([フルデータ同期] が選択されている場合にのみ使用可能)。 |
[増分データ同期のスロットリングの有効化] | RPS とデータ同期速度を設定して、増分同期をスロットリングできます |
[正方向および逆方向タスクのハートビートテーブルに対する SQL 操作を削除するかどうか] | [はい]アラート通知設定:ソースにハートビート SQL を書き込みません (レイテンシーが表示される場合があります)。 [いいえ]:ハートビート SQL を書き込みます (ソースの物理バックアップとクローニングに影響を与える可能性があります) |
[環境タグ] | 任意。環境識別のためにインスタンスにタグ付けできます |
[ETL の構成] | 抽出、変換、ロード (ETL) を有効にして、データ変換を適用できます。詳細については、「ETLとは」および「ETLの設定」をご参照ください |
[モニタリングとアラート] | タスクの失敗または遅延がしきい値を超えた場合にアラートを設定できます。詳細については、「モニタリングとアラートの設定」をご参照ください |
(任意) [次へ: データベースとテーブルフィールドを設定] をクリックして、テーブルごとに [主キー列]、[分散キー]、および [エンジン] を指定します。
このステップは、[スキーマ同期] が選択されている場合にのみ使用できます。[定義ステータス] を [すべて] に設定すると、すべてのテーブルが表示されます。
[プライマリキー列] は複数の列をサポートします。[ディストリビューションキー] はプライマリキー列のサブセットである必要があります。
プライマリキーまたは UNIQUE 制約がないテーブルの場合、[エンジン] に [重複] を選択します。そうしないと、タスクが失敗するか、データ損失が発生する可能性があります。
手順4:事前チェックの実行
[次へ: タスク設定の保存と事前チェック] をクリックします。
DTS はタスクを開始する前に事前チェックを実行します。タスクは、すべてのチェックに合格した後にのみ開始されます。
チェックが失敗した場合は、[詳細を表示] をクリックして原因を確認し、問題を修正して、事前チェックを再実行してください。
警告が表示された場合、項目を無視できない場合は修正して再実行し、安全に無視できる場合は [アラート詳細の確認] > [無視] > [OK] > [再度事前チェック] の順にクリックします。アラートを無視すると、データ不整合が発生する可能性があります。
このタスク設定の OpenAPI パラメーターをプレビューするには、[次へ:タスク設定の保存と事前チェック] にポインターを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
手順5:インスタンスの購入
[成功率] が [100%] に達したら、[次へ: インスタンスの購入] をクリックします。
購入ページで、以下を設定します。
パラメーター | 説明 |
[請求方法] | [サブスクリプション]: 一定期間分を前払いします。長期利用の場合、より費用対効果が高くなります。従量課金: 時間単位で課金されるため、短期利用に適しています。不要になったインスタンスを解放すると、課金は停止されます。 |
[リソースグループ設定] | インスタンスのリソースグループ。 デフォルト: [デフォルトのリソースグループ]。 「リソース管理とは」をご参照ください。 |
[インスタンスクラス] | スループット要件に基づいて選択してください。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください |
[サブスクリプション期間] | サブスクリプション課金で利用可能です。オプション:1~9 か月、1、2、3、または 5 年 |
[データ転送サービス (従量課金) サービス規約] を読み、選択します。
[購入して開始] をクリックし、次にダイアログボックスで [OK] をクリックします。
タスクがタスクリストに表示されます。そこから進捗を監視できます。
データ型マッピング
次の表は、PolarDB for MySQL のデータ型が Doris のデータ型にどのようにマッピングされるかを示しています。
カテゴリ | PolarDB for MySQL | Doris |
数値 | TINYINT | TINYINT |
TINYINT 符号なし | SMALLINT | |
SMALLINT | SMALLINT | |
SMALLINT 符号なし | INT | |
MEDIUMINT | INT | |
MEDIUMINT 符号なし | BIGINT | |
INT | INT | |
INT 符号なし | BIGINT | |
BIGINT | BIGINT | |
BIGINT 符号なし | 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 |
BINARY / VARBINARY | STRING | |
TINYTEXT / TEXT / MEDIUMTEXT / LONGTEXT | STRING | |
TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB | STRING | |
ENUM | STRING | |
SET | STRING | |
JSON | STRING |
CHAR と VARCHAR の変換に関する注意:
データ損失を防ぐため、CHAR および VARCHAR(n) の値は
VARCHAR(4*n)に変換されます。これは、VARCHAR サイズの定義が PolarDB for MySQL (文字長) と Doris (バイト長) で異なるためです。長さが指定されていない場合、デフォルトは
VARCHAR(65533)です。65,533 バイトを超える値は、STRING 型に変換されます。
スキーマ同期を使用していない場合は、Doris の VARCHAR の長さを、対応する MySQL の VARCHAR の長さの 4 倍に設定してください。
DTS によって追加される列
重複キーモデルを使用するテーブルに同期する場合、DTS はターゲットテーブルに次の列を自動的に追加します。
列 | データ型 | デフォルト | 説明 |
| Int | 0 | 削除フラグ:INSERT 操作および UPDATE 操作の場合は 0、DELETE 操作の場合は 1 |
| Bigint | 0 | フル同期中は 0、増分同期中は対応するバイナリログのタイムスタンプ (秒単位) |
| Bigint | 0 | フル同期中は 0、増分同期中は増分ログからの一意で増加するレコード ID |
ターゲットテーブルが重複キーモデルを使用する場合、これらの列を使用してデータを重複排除します。