Data Transmission Service (DTS) を使用すると、AnalyticDB for PostgreSQL インスタンスを ApsaraDB RDS for MySQL ソースとリアルタイムで同期させることができ、ライブビジネスデータに対するリアルタイム分析が可能になります。本トピックでは、このパイプライン向けのデータ同期タスクの設定方法について説明します。
サポートされるソースデータベース
本トピックの手順では、ApsaraDB RDS for MySQL インスタンスをソースとして使用します。以下のいずれかの MySQL データベースタイプをソースとして使用する場合も、同じ手順が適用されます。
ApsaraDB RDS for MySQL インスタンス
Elastic Compute Service (ECS) 上でホストされる自己管理 MySQL データベース
Express Connect、VPN Gateway、または Smart Access Gateway 経由で接続された自己管理 MySQL データベース
Database Gateway 経由で接続された自己管理 MySQL データベース
Cloud Enterprise Network (CEN) 経由で接続された自己管理 MySQL データベース
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ApsaraDB RDS for MySQL のソースインスタンス
宛先となる AnalyticDB for PostgreSQL インスタンス(詳細については、「インスタンスの作成」をご参照ください)
ソースインスタンス上のデータベースアカウント(REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、SELECT 権限を付与済み)
宛先インスタンス上のデータベースアカウント(初期アカウントロールまたは RDS_SUPERUSER 権限を付与済み)。詳細については、「ユーザーおよび権限の管理」をご参照ください
バイナリログの要件
DTS の設定を行う前に、以下のバイナリログ設定を確認してください。
ApsaraDB RDS for MySQL の場合(バイナリロギングはデフォルトで有効):
binlog_row_imageをfullに設定します。詳細については、「インスタンスパラメーターの変更」をご参照ください。バイナリログは少なくとも 3 日間保持してください(7 日間推奨)。詳細については、「バイナリログファイルの削除」をご参照ください。
自己管理 MySQL の場合:
バイナリロギングを有効化します
binlog_formatをrowに設定しますbinlog_row_imageをfullに設定しますバイナリログの保持期間を最低 7 日間に設定します
デュアルプライマリクラスターの場合、
log_slave_updatesをONに設定します。詳細については、「自己管理 MySQL データベースのアカウントを作成してバイナリロギングを設定する」をご参照ください。
DTS が読み取る前にバイナリログがパージされると、同期タスクは失敗し、データの不整合や損失が発生する可能性があります。保持期間が上記の最小値を下回る場合、DTS はサービスレベル合意(SLA)パフォーマンスを保証しません。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期および完全データ同期 | 無料 |
| 増分データ同期 | 課金概要 |
制限事項
ソースデータベース
テーブルには PRIMARY KEY または一意制約(すべてのフィールドが一意)が必要です。これらの制約がないテーブルを使用すると、宛先に重複レコードが生成される可能性があります。
データベース全体ではなく個別のテーブルを同期対象とする場合、テーブル名やカラム名の変更などの編集を行う際、1 つのタスクで最大 1,000 個のテーブルをサポートします。タスク内のテーブル数が 1,000 を超えると、リクエストエラーが発生します。より大規模なセットの同期には、複数のタスクを設定するか、データベース単位での同期を行ってください。
DTS では、以下のデータ型は同期されません:BIT、VARBIT、GEOMETRY、ARRAY、UUID、TSQUERY、TSVECTOR、TXID_SNAPSHOT、POINT。
プレフィックスインデックスはサポートされておらず、タスクが失敗する原因となる可能性があります。
同期対象として選択できるのはテーブルのみです。インデックス、パーティション、ビュー、ストアドプロシージャ、関数、トリガー、外部キーは除外されます。
同期中に、プライマリキーを変更する DDL 文やコメントを追加する文(例:
ALTER TABLE table_name COMMENT='...')を実行しないでください。これらの操作は無効です。スキーマ同期または完全データ同期のフェーズ中は、データベースまたはテーブルのスキーマを変更する DDL 文を実行しないでください。
ソースが MySQL 8.0.23 以降であり、テーブルに不可視カラムが含まれている場合、DTS はそれらのカラムを読み取れず、データ損失が発生します。タスク開始前に、
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE;を実行してカラムを可視化してください。明示的なプライマリキーを持たないテーブルには自動的に不可視プライマリキーが生成されるため、それらも可視化してください。「Invisible Columns」および「Generated Invisible Primary Keys」をご参照ください。EncDB が有効化された ApsaraDB RDS for MySQL インスタンスをソースとして使用する場合、完全データ同期はサポートされません。透過的データ暗号化(TDE)が有効化されたインスタンスは、3 つの同期タイプすべてをサポートします。
0000-00-00 00:00:00の DATETIME 値は、宛先でnullに変換されます。これを回避するには、ソースで値を0001-01-01 00:00:00に変更するか、タスク開始前に宛先フィールドを空欄のままにしてください。同期インスタンスの実行中は、物理バックアップから復元されたデータやカスケード操作によるデータなど、バイナリログの変更操作によって生成されたデータは、送信先に記録または同期されません。このような問題が発生した場合、ビジネスに影響がない場合に限り、影響を受けるデータベースまたはテーブルを同期オブジェクトから削除し、再度追加することができます。詳細については、「同期するオブジェクトを変更する」をご参照ください。
宛先データベース
宛先テーブルは、追加最適化(AO)テーブルであってはなりません。
宛先テーブルの一意キー(プライマリキーを含む)には、分散キーのすべてのカラムが含まれている必要があります。
ソーステーブルにプライマリキーがある場合、宛先のプライマリキー列はソースと一致します。ソーステーブルにプライマリキーがない場合、宛先のプライマリキー列は分散キーと一致します。
その他の制限事項
同期中に他のソースから宛先に書き込まれたデータは、不整合を引き起こす可能性があります。DTS 実行中は、宛先テーブルへの同時書き込みを避けてください。
個別のテーブルがオブジェクトとして選択された場合、
pt-online-schema-changeなどのオンライン DDL ツールはサポートされていません。代わりに、ロックなし DDL 操作を実行するには Data Management (DMS) を使用してください。詳細については、「ロックなし DDL 操作の実行」をご参照ください。カラムマッピングを使用する場合、またはソースと宛先のスキーマが異なる場合、ソースに存在し宛先に存在しないカラムは同期されません。
スキーマ同期中、DTS はソースデータベースから宛先データベースへ外部キーを同期します。
DTS は、完全および増分データ同期のセッションレベルで、一時的に外部キー制約チェックおよびカスケード操作を無効化します。この期間中にソースでカスケード更新または削除が実行されると、データの不整合が発生する可能性があります。
初期完全データ同期中、同時 INSERT 操作により、宛先でテーブルの断片化が発生します。完全同期完了後、宛先の表領域はソースよりも大きくなります。負荷低減のため、初期同期は非ピーク時間帯に実行することを推奨します。
DTS タスクが失敗した場合、DTS テクニカルサポートが 8 時間以内に復旧を試みます。復旧中、タスクは再起動され、パラメーターが調整される場合があります。
自己管理 MySQL ソース
タスク実行中にプライマリ/セカンダリ スイッチオーバーが発生すると、タスクが失敗します。
DTS は、最新の同期タイムスタンプと現在のソースタイムスタンプを比較することで同期遅延を算出します。ソースで長期間 DML 操作が実行されない場合、報告される遅延は不正確になる可能性があります。遅延メトリックを更新するには、ソースで DML 操作を実行してください。同期対象としてデータベース全体を選択した場合、遅延メトリックを正確に保つために、1 秒ごとに更新されるハートビートテーブルを作成できます。
DTS は定期的にソースに対して
CREATE DATABASE IF NOT EXISTS 'test'を実行し、バイナリログ位置を進めます。
ApsaraDB RDS for MySQL ソース
トランザクションログを記録しない ApsaraDB RDS for MySQL インスタンス(例:読み取り専用の ApsaraDB RDS for MySQL 5.6 インスタンス)は、ソースとして使用できません。
DTS は定期的にソースに対して
CREATE DATABASE IF NOT EXISTS 'test'を実行し、バイナリログ位置を進めます。
同期可能な SQL 操作
DML: INSERT、UPDATE、DELETE
AnalyticDB for PostgreSQL への書き込み時に、DTS は UPDATE を REPLACE INTO に変換します。UPDATE がプライマリキー列を対象とする場合、DTS は DELETE の後に INSERT を実行します。
DDL: CREATE TABLE、ALTER TABLE、TRUNCATE TABLE、DROP TABLE
サポートされる同期トポロジ
一方通行・一対一
一方通行・一対多
一方通行・多対一
用語マッピング
| MySQL | AnalyticDB for PostgreSQL |
|---|---|
| データベース | スキーマ |
| テーブル | テーブル |
データ同期タスクの設定
本手順は 9 ステップで構成されています:タスクページの開く、リージョンの選択、ソースおよび宛先データベースの設定、接続性のテスト、同期対象および設定の構成、高度な設定の構成、主キーおよび分散キー列の設定、事前チェックの実行、インスタンスの購入および開始です。
ステップ 1:データ同期タスクページを開く
Data Management (DMS) コンソール にログインします。
トップナビゲーションバーで、Data + AI をクリックします。
左側のナビゲーションウィンドウで、DTS (DTS) > データ同期 を選択します。
コンソールのナビゲーションは、お客様の DMS レイアウトによって異なる場合があります。「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。または、直接「データ同期タスクページ」にアクセスしてください。
ステップ 2:リージョンの選択
データ同期タスク の右側で、データ同期インスタンスが配置されているリージョンを選択します。
新しい DTS コンソールでは、トップナビゲーションバーからリージョンを選択します。
ステップ 3:ソースおよび宛先データベースの設定
タスクの作成 をクリックします。ウィザードで、以下のパラメーターを設定します。
ソースデータベース
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS タスクの名前です。DTS によって自動的に生成されます。識別しやすいように、説明的な名前を使用してください。一意である必要はありません。 |
| データベースタイプ | [MySQL] を選択します。 |
| アクセス方法 | [Alibaba Cloud インスタンス] を選択します。 |
| インスタンスリージョン | ソース ApsaraDB RDS for MySQL インスタンスのリージョンです。 |
| Alibaba Cloud アカウント間でのデータレプリケーション | 同一アカウント内で同期する場合は、[いいえ] を選択します。 |
| RDS インスタンス ID | ソースインスタンスの ID です。ソースと送信先は、同じインスタンス (インスタンス内同期の場合) または異なるインスタンスにすることができます。 |
| データベースアカウント | `REPLICATION CLIENT`、`REPLICATION SLAVE`、`SHOW VIEW`、`SELECT` 権限を持つアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | [非暗号化] または [SSL 暗号化] を選択します。SSL 暗号化を使用するには、まず RDS インスタンスで SSL 暗号化を有効にする必要があります。詳細については、「クラウド証明書を使用して SSL 暗号化を有効にする」をご参照ください。 |
宛先データベース
| パラメーター | 説明 |
|---|---|
| データベースタイプ | AnalyticDB for PostgreSQL を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | 宛先の AnalyticDB for PostgreSQL インスタンスのリージョンです。 |
| インスタンス ID | 宛先インスタンスの ID です。 |
| データベース名 | 宛先インスタンス内のターゲットデータベースの名前です。 |
| データベースアカウント | 初期アカウント、または RDS_SUPERUSER 権限を付与済みのアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
ステップ 4:接続性のテスト
接続性のテストと続行 をクリックします。
DTS は、自動的にそのサーバーの CIDR ブロックを Alibaba Cloud データベースインスタンスのホワイトリストおよび ECS でホストされるデータベースのセキュリティグループルールに追加します。データベースが ECS 上でホストされている場合、ECS インスタンスがデータベースにアクセスできるようにすることも必要です。データベースが複数の ECS インスタンスにまたがって展開されている場合、各 ECS インスタンスのセキュリティグループルールに DTS の CIDR ブロックを手動で追加する必要があります。データセンターまたはサードパーティクラウド内の自己管理データベースの場合、DTS の CIDR ブロックをデータベースのホワイトリストに手動で追加してください。詳細については、「DTS サーバーの CIDR ブロック」をご参照ください。
DTS の CIDR ブロックをホワイトリストまたはセキュリティグループに追加すると、セキュリティリスクが高まります。続行する前に、強力な認証情報の使用、公開ポートの制限、ホワイトリストルールの定期監査、不正な CIDR ブロックの削除などの予防措置を講じてください。セキュリティリスクを軽減するには、Express Connect、VPN Gateway、または Smart Access Gateway を介した接続をご検討ください。
ステップ 5:同期対象および設定の構成
| パラメーター | 説明 |
|---|---|
| 同期タイプ | スキーマ同期、フルデータ同期、および増分データ同期を選択します。デフォルトでは増分データ同期が選択されていますが、他の 2 つも必ず選択する必要があります。スキーマ同期とフル同期によりベースラインが確立され、その後の増分同期によって送信先が最新の状態に保たれます。 |
| 競合テーブルの処理モード | 事前チェックしてエラーを報告(デフォルト):送信先に同名のテーブルが存在する場合、事前チェックが失敗します。必要に応じて、オブジェクト名マッピングを使用して競合するテーブルの名前を変更してください。「オブジェクト名のマッピング」をご参照ください。エラーを無視して続行:名前の競合に関する事前チェックをスキップします。フル同期中は、主キーまたは一意キーの値が一致する送信先の既存レコードが保持されます。増分同期中は、それらのレコードが上書きされます。スキーマが異なる場合、初期化が失敗したり、一部のカラムのみが同期されたり、データ同期インスタンスが失敗する可能性があるため、注意して続行してください。 |
| 同期対象の DDL および DML 操作 | 同期する SQL 操作です。「同期可能な SQL 操作」をご参照ください。オブジェクトごとに SQL フィルターを設定するには、選択済みオブジェクト内のオブジェクトを右クリックし、操作を選択します。 |
| ソースオブジェクト | オブジェクトを選択し、矢印アイコンをクリックして選択済みオブジェクトに追加します。サポートされるのはテーブルのみです。 |
| 選択済みオブジェクト | 単一のオブジェクトの名前を変更するには、そのオブジェクトを右クリックします。一括で名前を変更するには、一括編集をクリックします。「オブジェクト名のマッピング」をご参照ください。行をフィルターするには、テーブルを右クリックして WHERE 条件を指定します。「フィルター条件の指定」をご参照ください。オブジェクトの名前を変更すると、依存オブジェクトの同期が中断される可能性があります。 |
ステップ 6:高度な設定の構成
次へ:高度な設定 をクリックします。
データ検証
詳細については、「データ検証の設定」をご参照ください。
高度な設定
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | デフォルトでは、DTS は共有クラスターにスケジュールされます。安定性の向上のために、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| アラートの設定 | [いいえ]: アラート機能が無効化されています。はい: アラートのしきい値と連絡先を設定します。詳しくは、「モニタリングとアラートの設定」をご参照ください。 |
| 接続失敗時のリトライ時間 | 接続失敗時に DTS がリトライする時間です。範囲:10~1440 分。デフォルト:720 分。30 分以上を設定してください。複数のタスクが同一のソースまたは宛先を共有する場合、最も短いリトライ期間が優先されます。リトライ中は DTS インスタンスの課金が発生します。ソースおよび宛先が廃止された場合は、インスタンスを速やかにリリースしてください。 |
| その他の問題発生時のリトライ時間 | DDL/DML 失敗時に DTS がリトライする時間です。範囲:1~1440 分。デフォルト:10 分。必ず 接続失敗時のリトライ時間 より短く設定してください。 |
| 完全データ同期のスロットリング有効化 | 初期完全データ同期中の負荷低減のため、ソースへの QPS、完全同期の RPS、およびデータスループット(MB/秒)を制限します。完全データ同期 が選択されている場合にのみ利用可能です。 |
| 増分データ同期のスロットリング有効化 | 増分同期中の負荷低減のため、RPS およびスループット(MB/秒)を制限します。 |
| 環境タグ | DTS インスタンスを環境別にタグ付けします(任意)。 |
| オブジェクト名を引用符で囲む | はい:DTS は、スキーマ同期および増分同期中に、名前に大文字と小文字が混在している場合、英字以外の文字で始まる場合、標準外の文字を含む場合、または宛先の予約語と衝突する場合に、スキーマ、テーブル、カラム名をシングルクォートまたはダブルクォートで囲みます。いいえ:名前は引用符で囲まれません。 |
| ETL の設定 | はいETL の設定:コードエディタでデータ変換文を入力します。「」をご参照ください。いいえ:変換は行いません。 |
| フォワードおよびリバースタスクのハートビートテーブルに対する SQL 操作の削除有無 | はい:DTS はハートビートテーブル操作をソースに書き込みません。タスクに遅延メトリックが表示される場合があります。いいえ:DTS はハートビート操作をソースに書き込みますが、これによりソースデータベースの物理バックアップおよびクローン作成に影響が出る可能性があります。 |
ステップ 7:プライマリキーおよび分散キー列の設定
次へ:データベースおよびテーブルフィールドの設定 をクリックします。宛先の AnalyticDB for PostgreSQL インスタンスに同期する各テーブルについて、プライマリキーおよび分散キー列を設定します。
ステップ 8:事前チェックの実行
次へ:タスク設定の保存および事前チェック をクリックします。
保存前に同等の OpenAPI パラメーターをプレビューするには、ボタンにカーソルを合わせて OpenAPI パラメーターのプレビュー をクリックします。
DTS は、同期を開始する前に事前チェックを実行します。いずれかの項目が失敗した場合:
失敗した項目の横にある 詳細の表示 をクリックし、問題を解決した後、再事前チェック をクリックします。
警告項目を安全に無視できる場合は、警告の詳細の確認 をクリックし、ダイアログで 無視 をクリックして OK をクリックし、その後 再事前チェック をクリックします。警告を無視すると、データの不整合が発生する可能性があります。
成功確率 が 100% になるまで待機し、その後 次へ:インスタンスの購入 をクリックします。
ステップ 9:インスタンスの購入および開始
購入 ページで、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| 課金方法 | 従量課金:1 時間単位で課金されます。不要になった時点でインスタンスをリリースし、継続的な課金を回避してください。 |
| リソースグループ設定 | インスタンスのリソースグループです。デフォルト: デフォルトリソースグループResource Management の概要 |
| インスタンスクラス | 同期スループットクラスです。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 |
Data Transmission Service(従量課金)サービス利用規約 を読み、チェックボックスをオンにした後、購入および開始 をクリックします。確認ダイアログで OK をクリックします。
タスクはタスクリストに表示されます。そこで進行状況を監視してください。