このドキュメントでは、CanalとOceanBase Binlogサービスを使用して、OceanBaseデータベースからMySQLデータベースへデータを同期する方法について説明します。
OceanBase CDCの実装ロジック
OceanBase Binlogサービスは、OceanBaseデータベースの増分ログプロキシサービスです。libobcdc(旧称:liboblog)を基盤とし、サービスとしてリアルタイムの増分リンクアクセスおよび管理機能を提供することで、アプリケーションがOceanBaseの増分ログに容易にアクセスできるようにします。ネットワークが隔離されている場合でも、増分ログのサブスクライブニーズを解決し、さまざまなリンクアクセス方式を提供します。
CanalはMySQLのBinlogログを解析し、データベースの増分データを抽出してサブスクライバーに送信し、消費および処理を行います。これにより、ユーザーはデータのリアルタイム同期やリアルタイム分析などのニーズを容易に実現できます。
データリンク:
ob_cluster -> obbinlog -> canal_client -> mysql
コンポーネントの紹介:
OceanBaseデータベース:Binlogログを生成する必要がある業務データベース。
OceanBaseデータベースプロキシ:業務データベースのODP(OBProxyとも呼ばれる)。Binlogをサブスクライブするクライアントに接続サービスを提供します。
OceanBase Binlogツール:OceanBase Binlogサービスのコアコンポーネントであるobbinlog(旧称oblogproxy)。clogの取得とBinlogログの生成を担当します。
操作手順
ステップ1:OceanBase Binlogサービスのインストール
Binlogクラスタの作成を参照して、OceanBase Binlogサービスのインストールとデプロイを完了してください。
ステップ2:Canal Serverのインストール
ソフトウェアパッケージをダウンロードします。
canal-for-ob.deployer.tar.gz をダウンロードします。
wget https://github.com/oceanbase/canal/releases/download/canal-for-ob-1.1.6-alpha/canal-for-ob.deployer.tar.gz圧縮ファイルを
/Canal_Home/canal-for-obディレクトリに解凍します。mkdir /Canal_Home/canal-for-ob && tar zxvf canal-for-ob.deployer.tar.gz -C /Canal_Home/canal-for-ob設定ファイル
canal.propertiesを修正します。/Canal_Home/canal-for-ob/conf/canal.properties を修正します。
canal.serverMode = tcp canal.destinations = example canal.instance.global.spring.xml = classpath:spring/ob-default-instance.xmlCanalインスタンスを設定します。
/Canal_Home/canal-for-ob/conf/example 内の instance.properties を削除し、ob-instance.properties を instance.properties にリネームします。
instance.propertiesを修正します。例:cd /Canal_Home/canal-for-ob/conf/example vi instance.properties # OceanBaseクラスタパラメータ canal.instance.oceanbase.rsList=10.10.10.1:2882:2881;10.10.10.2:2882:2881;10.10.10.3:2882:2881 canal.instance.oceanbase.username=root@mysql001#test4000 canal.instance.oceanbase.password=****** canal.instance.oceanbase.startTimestamp=0 # oceanbase logproxyパラメータ canal.instance.oceanbase.logproxy.address=10.10.10.1:2983 canal.instance.oceanbase.logproxy.sslEnabled=false canal.instance.oceanbase.logproxy.serverCert=../conf/${canal.instance.destination:}/ca.crt canal.instance.oceanbase.logproxy.clientCert=../conf/${canal.instance.destination:}/client.crt canal.instance.oceanbase.logproxy.clientKey=../conf/${canal.instance.destination:}/client.key # テナントプレフィックスをデータベース名から除外するかどうか。logproxyが出力するログでは、デフォルトでデータベース名は[tenant].[db]となります。 canal.instance.oceanbase.tenant=mysql001 canal.instance.parser.excludeTenantInDbName=true # ログフィルタリング。[tenant].[database].[table] の形式で、正規表現をサポートします。 canal.instance.filter.regex=mysql001.*.*Canal Serverを起動します。
cd /Canal_Home/canal-for-ob && sh bin/startup.sh
ステップ3:RDBアダプターを設定する
ソフトウェアパッケージをダウンロードします。
canal-for-ob.adapter.tar.gz をダウンロードします。
wget https://github.com/oceanbase/canal/releases/download/canal-for-ob-1.1.6-alpha/canal-for-ob.adapter.tar.gz圧縮ファイルを
/Canal_Home/canal-adapter-for-obディレクトリに解凍します。mkdir /Canal_Home/canal-adapter-for-ob && tar zxvf canal-for-ob.adapter.tar.gz -C /Canal_Home/canal-adapter-for-obapplication.ymlを修正します。cd /Canal_Home/canal-adapter-for-ob/conf vi application.yml canalAdapters: - instance: example # canal instance Name or mq topic name groups: - groupId: g1 outerAdapters: - name: logger - name: rdb key: mysql1 properties: jdbc.driverClassName: com.mysql.jdbc.Driver jdbc.url: jdbc:mysql://10.10.10.1:3306/test_data?useUnicode=false jdbc.username: root jdbc.password: ******アダプターライブラリ/テーブルマッピングを修正します(ライブラリマッピングを例として説明します)。
cd /Canal_Home/canal-adapter-for-ob/conf/rdb vi application.yml ## Mirror schema synchronize config dataSourceKey: defaultDS destination: example groupId: g1 outerAdapterKey: mysql1 concurrent: true dbMapping: mirrorDb: true database: test_datacanalクライアントを起動します。
cd /Canal_Home/canal-adapter-for-ob && sh bin/startup.shデータ同期状況を確認します。
OceanBaseのソース側にデータを書き込み、MySQLのターゲット側でデータ同期を確認します。
機能制限
同期するテーブルには主キーが存在していなければなりません。そうでない場合、ソース側で主キーのないテーブルから任意のレコードを削除すると、ターゲット側に同期された際にテーブル全体が削除されてしまいます。
DDLでは、新規テーブルの作成や列の追加がサポートされています。