本記事では、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(フル移行段階で1秒間にターゲット側に最大で書き込める行数の上限)、ターゲット側の書き込みBPS(フル移行段階で1秒間にターゲット側に最大で書き込めるストリーム量の上限)を設定してください。 説明
ここで設定されたRPSとBPSは、スロットリング機能としてのみ機能し、フル移行で実際に達成可能な性能は、ソース側、ターゲット側、インスタンス仕様の設定などの要因によって制限されます。
ターゲット側テーブルオブジェクトにレコードが存在する場合の処理ポリシー 処理ポリシーには、移行を停止 と 無視する が含まれます: - 移行を停止する を選択した場合、ターゲット側のテーブルオブジェクトにデータが存在すると、フル移行はエラーとして「移行を許可できません」と表示されます。ターゲット側のデータを適切に処理してから、移行を続けてください。
注意
エラー発生後に「復元」をクリックすると、データ移行はこの設定オプションを無視し、テーブルデータの移行を続けます。操作は慎重に行ってください。
- 無視する を選択した場合、ターゲット側のテーブルオブジェクトにデータが存在し、元のデータと書き込むデータが競合すると、データ移行は競合データをログに記録し、元のデータを変更せずに保持するポリシーでデータを書き込みます。
インデックスの後付けを許可するかどうか インデックスの後付け機能は、フル移行の所要時間を短縮できます。ここでは、フルデータ移行完了後にインデックスを作成することを許可するかどうかを設定します。インデックスの後付けを選択する際の注意事項については、表の下部の説明をご参照ください。 注意
移行タイプの選択 ページで、構造移行 と フル移行 の両方を選択した場合にのみ、このオプションの設定がサポートされます。
- 一意キー以外のインデックスのみ、後付け作成をサポートします。
- 並列度の設定が8以上の場合、インデックスの中間結果セット圧縮が有効になり、追加のCPUオーバーヘッドが発生する可能性があります。
インデックスの後付けを許可する場合、OceanBaseデータベースのハードウェア条件と現在の業務トラフィック状況に基づき、CLIツールを使用して以下のビジネステナントパラメータを調整することを推奨します。
// ファイルメモリバッファサイズの制限 ALTER SYSTEM SET _temporary_file_io_area_size = '10' tenant = 'xxx'; // OceanBaseデータベースV4.xのレート制限の無効化 ALTER SYSTEM SET sys_bkgd_net_percentage = 100;- 移行を停止する を選択した場合、ターゲット側のテーブルオブジェクトにデータが存在すると、フル移行はエラーとして「移行を許可できません」と表示されます。ターゲット側のデータを適切に処理してから、移行を続けてください。
増分同期
タイプとオブジェクトの選択 ページで、双方向同期 > 増分同期 を選択すると、以下のパラメータが表示されます。
パラメータ説明書き込み並列設定 このパラメータは、増分同期段階でターゲット側にデータを書き込む並列数を設定します。最大制限は512です。並列数が高すぎると、ターゲット側の負荷が過大になり、業務に影響を与える可能性があります。 増分移行レートの制限を有効にするかどうか 実際のニーズに応じて、増分同期レートの制限を有効にするかどうかを決定できます。有効にする場合は、ターゲット側の書き込みRPS(増分同期段階で1秒間にターゲット側に同期できるデータ行数の最大値の制限)とターゲット側の書き込みBPS(増分同期段階で1秒間にターゲット側に同期できるストリーム量の最大値の制限)を設定してください。 説明
ここで設定されたRPSとBPSは、スロットリング機能としてのみ機能し、増分同期で実際に達成可能な性能は、ソース側、ターゲット側、インスタンス仕様の設定などの要因によって制限されます。
増分同期開始時刻 - 移行タイプの選択時に 全量移行 を選択した場合、このパラメータは表示されません。
- 移行タイプの選択時に 全量移行 を選択せず、増分同期 を選択した場合、この時点以降のデータの移行を指定してください。デフォルトは現在のシステム時刻です。増分同期の開始時刻の設定をご参照ください。
データ競合時の処理ポリシー エラーを無視し、ターゲット側の元のデータを維持する と 競合を無視し、ソース側のデータでターゲット側のデータを上書きする が含まれます。詳細については、前述の「データ競合シナリオの説明」モジュールをご参照ください。 Binlogポイントの定期的な進捗 この機能を有効にする場合は、頻度を設定する必要があります。設定可能な頻度範囲は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は、速度制限とトラフィック制限の能力としてのみ機能します。増分同期が実際に達成できる性能は、ソース側、ターゲット側、インスタンス仕様の設定などの要因の影響を受けます。
- データ競合の処理
エラーを無視し、ターゲット側の元のデータを維持する と 競合を無視し、ソース側のデータでターゲット側のデータを上書きする が含まれます。詳細については、上記「データ競合シナリオの説明」モジュールの内容をご参照ください。
- 同時実行の書き込み
次へ をクリックすると、システムは反転タスクの事前チェックを実行します。
事前チェック プロセスでは、データ移行はデータベースユーザーの読み書き権限、データベースのネットワーク接続などが要件を満たしているかどうかをチェックします。すべてのチェック項目が合格した場合にのみ、データ移行タスクを開始できます。事前チェックでエラーが発生した場合:
問題を調査・処理した後、事前チェックを再実行し、成功するまで繰り返すことができます。
失敗した事前チェック項目の操作列にある スキップ をクリックすることもできます。これにより、その操作をスキップする具体的な影響を示すダイアログがポップアップ表示されます。スキップしてもよいことを確認したら、ダイアログ内の 確定 をクリックしてください。
事前チェックが成功したら、購入 をクリックし、データ移行インスタンスを購入する ページで購入します。
購入が成功すると、反転タスクを開始できます。購入の詳細については、データ移行インスタンスの購入をご参照ください。一時的にタスクを開始する必要がない場合は、保存 をクリックしてください。その後は、タスク一覧 ページでのみ関連操作を実行できます。