本記事では、MySQLデータベースからOceanBaseデータベースのMySQL互換モードへの双方向同期タスクを例に、双方向同期に関する説明と操作手順を紹介します。
背景情報
双方向同期とは
双方向同期は、データの増分同期段階で、同一データソースに対する正方向と逆方向の移行タスクを同時に設定し、データがデータ送信元とデータ送信先の間で相互に同期できる機能を実現します。循環複製を防止するメカニズムにより、ある方向で既に同期されたデータが、反対方向のタスクで繰り返し同期されるのを防ぎます。
説明
双方向同期とは、業務が両端で同時に書き込み操作を行えることを意味するものではありません。業務が同一のデータ(同一のプライマリキーまたはユニークキー)に対して同時に書き込み操作を行う場合は、双方向同期タスクの設定でデータ競合の処理ポリシー(上書きまたは無視)を定義する必要があります。業務レベルでは、両端に同一データを同時に書き込む操作を避けることを強く推奨します。
双方向同期をサポートする移行タイプ
データ移行は、MySQLデータベースとOceanBaseデータベースのMySQL互換モード、OracleデータベースとOceanBaseデータベースのOracle互換モード、およびOceanBaseデータベース間の双方向データ同期をサポートします。利用制限、注意事項などの詳細は、該当するタイプのデータ移行ドキュメントを参照してください。
MySQLデータソースの権限付与ステートメント
MySQLデータベースとOceanBaseデータベース間で双方向同期を行う場合は、現在のタスクのMySQLデータソースに属するデータベースアカウントにCREATE DATABASEおよびCREATE TABLE権限を付与してください。データ移行では、トランザクションデータベースとトランザクションテーブルを作成し、双方向同期における循環複製を防止する機能を実現する必要があります。そうでない場合、双方向同期タスクが異常になる可能性があります。
グローバルなデータベース作成権限の付与
GRANT CREATE ON *.* TO '<user_name>';ユーザーがomsという名前のデータベースにテーブルを作成できるようにする
GRANT CREATE ON oms.* TO '<user_name>';
OracleデータソースのSchema作成および権限付与ステートメント
OracleデータベースとOceanBaseデータベース間で双方向同期を実行する場合、現在のタスクのOracleデータソースにOMSという名前のSchemaを作成し、データソースのデータベースアカウントにOMS SchemaでCREATE TABLEを実行する権限を付与してください。権限を付与しない場合、双方向同期タスクが異常になる可能性があります。
OMSユーザーの作成
CREATE USER OMS IDENTIFIED BY <YOUR_PASSWORD>; // YOUR_PASSWORDは実際のユーザーパスワードです ALTER USER OMS QUOTA unlimited ON <USERS>; // USERSは実際のユーザーテーブルスペースです ALTER USER OMS QUOTA unlimited ON <YOUR_USERNAME> // YOUR_USERNAMEは実際のデータソースユーザー名です権限の付与
GRANT CREATE ANY TABLE TO <YOUR_USERNAME>; GRANT INSERT ANY TABLE TO <YOUR_USERNAME>; GRANT UPDATE ANY TABLE TO <YOUR_USERNAME>; GRANT DELETE ANY TABLE TO <YOUR_USERNAME>; GRANT SELECT ANY TABLE TO <YOUR_USERNAME>;
注意点
双方向同期タスクは、正方向/逆方向のタスクを設定することで構成され、サービスを提供します。
タイプ |
説明 |
|---|---|
| 正方向タスク |
|
| 逆方向タスク |
|
| その他の注意事項 |
|
データ競合シナリオの説明
双方向同期データの整合性を保証するため、同一のプライマリキーまたはNULL不可ユニークキーに対するデータ操作は、双方向同期の一方の側でのみ実行されるようにしてください。両方の側で同時に更新すると、データ競合が発生する可能性があります。主なシナリオは以下の通りです。
INSERT時のユニークキー競合
業務上、データ送信元/送信先の双方でほぼ同時に同一のユニークキーに対するINSERT操作を実行した場合、データ送信先に同期する際に一意性制約によりデータのINSERT書き込みが失敗します。タスク設定により、競合データを無視するか、データ送信先のデータを上書きするかを決定できます。
UPDATE時のユニークキー競合
更新対象のデータがデータ送信先に既に存在する場合、データ送信元のデータでデータ送信先のデータを上書き更新します。
更新対象のデータがデータ送信先に存在しない場合、データ更新が失敗します。
更新対象のデータについて、更新後にデータ送信先でプライマリキーまたはユニークキーの競合が発生した場合、データ更新が失敗します。
DELETE時のデータ競合
DELETE時に対応するレコードが存在しないため、DELETE操作が失敗します。
操作手順
正方向タスクの設定
データ移行タスクを タイプとオブジェクトの選択 の手順で設定し、同期トポロジー で 双方向同期 を選択します。
データ移行タスクの具体的な操作方法については、該当するタイプのデータ移行タスクのドキュメントを参照してください。
移行タイプ セクションで、現在のデータ移行タスクの移行タイプを選択します。
トポロジーが双方向同期の場合、サポートされている移行タイプは スキーマ移行、フル移行、および 増分同期 です。
パラメータ説明構造移行 構造移行では、文字セットのマッピング関係を自ら定義する必要があります。データ移行は、データ送信元データベースのデータ(構造)をデータ送信先データベースにコピーするだけで、ソースデータ(構造)に影響を与えません。 フル移行 フル移行タスク開始後、データ移行サービスはデータ送信元データベース内のテーブルの既存データをデータ送信先データベースの対応するテーブルに移行します。 増分同期 増分同期タスク開始後、データ移行はデータ送信元データベースで変更されたデータ(追加、変更、削除)をデータ送信先データベースの対応するテーブルに同期します。増分同期 には DML同期 と DDL同期期間 が含まれ、ニーズに応じてカスタマイズ設定できます。詳細は DML/DDLのカスタム設定 を参照してください。 移行オブジェクトの選択 セクションで、移行オブジェクトの選択方法を設定します。
移行オブジェクトは オブジェクトの指定 と マッチングルール の 2 つの方法から選択できます。
移行範囲の選択 セクションで、移行するオブジェクトを選択します。
オブジェクトの指定 を選択した場合、データ移行は データベース内のテーブル移行 と データベース全体の移行 をサポートします。データベース内のテーブル移行では、1 つまたは複数のデータベース内のテーブルやビューを移行オブジェクトとして選択でき、データベース全体移行ではデータベース全体を移行オブジェクトとして選択できます。あるデータベースでデータベース内のテーブル移行を選択した場合、そのデータベースはデータベース全体移行をサポートしなくなります。あるデータベースでデータベース全体移行を選択した場合、そのデータベースはデータベース内のテーブル移行をサポートしなくなります。
データベース内のテーブル移行 または データベース全体の移行 の方法を選択した後、左側で移行するオブジェクトを選択し、> をクリックして右側のリストに追加します。
データ移行は、テキスト形式でオブジェクトをインポートすることをサポートしており、データ送信先のオブジェクトに対して名前の変更、行フィルタリングの設定、列情報の表示、および単一またはすべての移行オブジェクトの削除などの操作をサポートしています。

説明
データベース全体の移行 を選択した場合:
右側のリストにはデータベース名のみが表示され、具体的なオブジェクトは表示されません。
増分同期-DDL同期期間 の移行タイプを選択した場合、データ送信元で新規作成されたテーブルはデータ送信先に同期されます。
操作説明インポート 選択エリアの右側にあるリストで、右上の オブジェクトのインポート をクリックします。移行オブジェクトのインポートを参照してください。 名前の変更 データ移行では、移行オブジェクトの名前を変更できます。データベース内のテーブルの名前変更を参照してください。 行フィルタリング データ移行では、 WHERE条件を使用した行のフィルタリングがサポートされています。SQL条件でデータをフィルタリングするを参照してください。また、カラムを表示 エリアで、移行オブジェクトの列情報を確認できます。すべて削除/クリア データ移行では、データマッピング時に、一時的にデータ送信先に選択された単一または複数のオブジェクトを削除する操作がサポートされています。 - 単一の移行オブジェクトの削除
選択エリアの右側にあるリストで、データ送信先オブジェクトの後ろにある 削除 アイコンをクリックすると、その移行オブジェクトを削除できます。 - すべての移行オブジェクトの削除
選択エリアの右側にあるリストで、右上の すべてクリア をクリックします。ダイアログボックスで、OK をクリックすると、すべての移行オブジェクトを削除できます。
マッチングルール を選択した場合の詳細については、データベース間のマッチングルールの設定を参照してください。
次へ をクリックし、移行オプション ページで、各パラメータを設定します。
フル移行
タイプとオブジェクトの選択 ページで、フル移行 を選択すると、以下のパラメータが表示されます。
パラメータ説明読み取り同時実行設定 このパラメータは、フル移行段階でデータ送信元からデータを読み取る同時実行数を設定します。最大値は512です。同時実行数が高すぎると、データ送信元の負荷が過大になり、業務に影響を与える可能性があります。 書き込み同時実行設定 このパラメータは、フル移行段階でデータ送信先にデータを書き込む同時実行数を設定します。最大値は512です。同時実行数が高すぎると、データ送信先の負荷が過大になり、業務に影響を与える可能性があります。 フル移行速度の制限 実際のニーズに応じて、フル移行速度の制限を有効にするかを決定できます。有効にする場合は、RPS(フル移行段階で1秒間にデータ送信先に移行できるデータ行数の最大値)とBPS(フル移行段階で1秒間にデータ送信先に移行できるデータ量の最大値)を設定してください。 説明
ここで設定されたRPSとBPSは、スロットリング機能としてのみ機能し、フル移行で実際に達成可能な性能は、データ送信元、データ送信先、インスタンス仕様の設定などの要因の影響を受けます。
データ送信先テーブルにレコードが存在する場合の処理ポリシー 処理ポリシーは、移行停止 と 無視 が含まれます: - 移行停止 を選択した場合、データ送信先テーブルにデータが存在すると、フル移行はエラーとなり、移行は許可されません。データ送信先のデータを適切に処理した後、移行を続けてください。
注意
エラー発生後にリストアをクリックすると、データ移行はこの設定オプションを無視し、テーブルデータの移行を続けます。操作は慎重に行ってください。
- 無視 を選択した場合、データ送信先テーブルにデータが存在し、元のデータと書き込むデータが競合すると、データ移行は競合するデータをログに記録し、元のデータを変更せずに保持するポリシーでデータを書き込みます。
インデックスの転置許可 インデックスの転置機能は、フル移行にかかる時間を短縮できます。ここでは、フルデータ移行完了後にインデックスを作成できるかどうかを設定します。インデックスの後付けを選択する際の注意事項については、表の下部の説明を参照してください。 注意
移行タイプの選択 ページで スキーマ移行 と フル移行 の両方を同時に選択している場合にのみ、このオプションの設定がサポートされます。
- 後付けできるのは、非ユニークキーインデックスのみです。
インデックスの転置を許可する場合、OceanBaseデータベースのハードウェア条件と現在の業務トラフィック状況に基づき、CLIツールを使用して以下のビジネステナントパラメータを調整することを推奨します。
// ファイルメモリバッファの制限 ALTER SYSTEM SET _temporary_file_io_area_size = '10' tenant = 'xxx'; // OceanBaseデータベースV4.xでのレート制限の無効化 ALTER SYSTEM SET sys_bkgd_net_percentage = 100;- 移行停止 を選択した場合、データ送信先テーブルにデータが存在すると、フル移行はエラーとなり、移行は許可されません。データ送信先のデータを適切に処理した後、移行を続けてください。
増分同期
タイプとオブジェクトの選択 ページで、双方向同期 > 増分同期 を選択すると、以下のパラメータが表示されます。
パラメータ説明Write Concurrent Configuration このパラメータは、増分同期フェーズにおいてデータ送信先にデータを書き込む同時実行数を設定します。最大制限は512です。同時実行数が高すぎると、データ送信先の負荷が過大になり、業務に影響を与える可能性があります。 Incremental Migration Rate Limit 実際のニーズに応じて、増分同期速度の制限を有効にするかどうかを決定できます。有効にする場合は、RPS(増分同期フェーズにおいて、1秒間にデータ送信先に同期できるデータ行数の最大値の制限)とBPS(増分同期フェーズにおいて、1秒間にデータ送信先に同期できるデータ量の最大値の制限)を設定してください。 説明
ここで設定されたRPSとBPSは、速度制限とトラフィック制限の能力としてのみ機能します。増分同期が実際に達成できる性能は、データ送信元、データ送信先、インスタンス仕様の設定などの要因の影響を受けます。
Incremental Synchronization Start Timestamp - 移行タイプを選択した際に フル移行 を選択している場合、このパラメータは表示されません。
- 移行タイプを選択した際に フル移行 を選択せず、増分同期 を選択した場合は、特定の時刻以降のデータの移行を指定してください。デフォルトは現在のシステム時刻です。詳細については、増分同期ポイントの設定を参照してください。
Data Conflict Handling Strategy エラーを無視し、データ送信先の元のデータを維持する と 競合を無視し、データ送信元のデータでデータ送信先のデータを上書きする が含まれます。詳細については、上記「データ競合シナリオの説明」セクションの内容を参照してください。 Scheduled Advancement of Binlog Timestamp この機能を有効にする場合は、頻度を設定する必要があります。設定可能な頻度範囲は1〜60で、単位は秒です。
設定完了後、データ移行は増分同期フェーズにおいて、設定した頻度で定期的にMySQLソースデータベースでCREATE DATABASE IF NOT EXISTS testコマンドを実行し、Binlogポイントを進めます。注意
このパラメータは、MySQLデータベースのデータをOceanBaseデータベースのMySQL互換モードに移行する場合にのみ表示されます。
詳細オプション
データ送信先のOceanBaseデータベースがV4.3.0以降のバージョンであり、かつ タイプとオブジェクトの選択 ページで、スキーマ移行 または 増分同期 > DDL同期期間 を選択した場合に、このセクションのパラメータが表示されます。

データ送信先のテーブルオブジェクトのストレージタイプには、デフォルト、行ストレージ、リスト、および 行列混合ストレージ が含まれます。この設定は、構造移行または増分同期時のデータ送信先テーブルオブジェクトのストレージタイプを決定するために使用されます。
説明
デフォルト オプションは、データ送信先のパラメータ設定に応じて他のオプションを自動的に適用するものであり、構造移行のテーブルオブジェクトや増分DDLによって新規作成されたテーブルオブジェクトが設定されたストレージタイプに従って対応する構造を書き込むために使用されます。
次へ をクリックすると、システムがデータ移行タスクの事前チェックを実行します。
事前チェック の段階で、データ移行はデータベースユーザーの読み書き権限、データベースのネットワーク接続などが要件を満たしているかどうかをチェックします。すべてのチェック項目に合格した場合にのみ、データ移行タスクを開始できます。事前チェックでエラーが発生した場合:
問題を調査・処理した後、事前チェックを再実行し、成功するまで繰り返すことができます。
または、失敗した事前チェック項目の操作列にある スキップ をクリックすると、ダイアログボックスが表示され、この操作をスキップした場合の具体的な影響について警告します。スキップしてもよいことを確認したら、ダイアログボックスの OK をクリックします。
事前チェックが成功したら、購入 をクリックし、データ移行インスタンスの購入 ページで購入します。
購入が成功すると、正方向タスクを開始できます。購入の詳細については、データ移行インスタンスの購入を参照してください。タスクをすぐに開始する必要がない場合は、保存 をクリックしてください。その後、関連する操作は タスクリスト ページでのみ行えます。
逆方向タスクの設定
タスクリスト ページに戻り、正方向タスクが 監視中 の増分同期段階にあり、タスク状態が 実行中 のとき、逆方向タスク後の 設定 をクリックします。

逆方向移行の設定 ページで、各パラメータを設定します。
パラメータ説明データ送信元とデータ送信先 データ移行のデータ送信元とデータ送信先が表示されます。接続詳細 をクリックすると、データ送信元とデータ送信先のクラウドベンダー、データベースタイプ、インスタンスタイプ、リージョンなどの詳細情報を確認できます。 増分同期 逆方向タスクの増分同期は、DML同期 の設定のみをサポートします。必要に応じて選択してください。 移行オブジェクト - 逆方向タスクと正方向タスクでは、移行オブジェクトの選択方法が同じです。表示 をクリックすると、オブジェクトを表示 ダイアログで移行オブジェクトを検索できます。
- 増分同期 関連設定:
- 書き込み同時実行構成
このパラメータは、増分同期フェーズでデータ送信先にデータを書き込む同時実行数を設定します。最大制限は512です。同時実行数が高すぎるとデータ送信先の負荷が過大になり、業務に影響を与える可能性があります。 - 増分移行レートを制限するか
実際のニーズに応じて、増分同期レート制限を有効にするかどうかを決定できます。有効にする場合は、RPS(増分同期フェーズで1秒間にデータ送信先に同期できるデータ行数の最大値の制限)とBPS(増分同期フェーズで1秒間にデータ送信先に同期できるデータ量の最大値の制限)を設定してください。説明
ここで設定されたRPSとBPSは、速度制限とトラフィック制限の能力としてのみ機能します。増分同期が実際に達成できる性能は、データ送信元、データ送信先、インスタンス仕様の設定などの要因の影響を受けます。
- データ競合時の処理ポリシー
エラーを無視し、データ送信先の既存データを維持 および 競合を無視し、データ送信元データでデータ送信先を上書き を含みます。詳細については、上記の「データ競合シナリオの説明」モジュールの内容を参照してください。
- 書き込み同時実行構成
次へ をクリックすると、システムは逆方向タスクの事前チェックを実行します。
事前チェック のステップでは、データ移行はデータベースユーザーの読み書き権限やデータベースのネットワーク接続などが要件を満たしているかどうかをチェックします。すべてのチェック項目に合格した場合にのみ、データ移行タスクを開始できます。事前チェックでエラーが発生した場合:
問題を調査し解決した後、事前チェックを再実行し、成功するまで繰り返すことができます。
失敗した事前チェック項目の操作列にある スキップ をクリックすると、ダイアログボックスが表示され、この操作をスキップする具体的な影響について警告します。スキップしてもよいことを確認したら、ダイアログボックス内の OK をクリックします。
事前チェックが成功したら、購入 をクリックし、データ移行インスタンスの購入 ページで購入します。
購入が成功すると、逆方向タスクを開始できます。購入の詳細については、データ移行インスタンスの購入を参照してください。タスクをすぐに開始する必要がない場合は、保存 をクリックしてください。その後、関連する操作は タスクリスト ページでのみ行えます。