このドキュメントでは、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 instanceを設定します。
/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 clientを起動します。
cd /Canal_Home/canal-adapter-for-ob && sh bin/startup.shデータ同期状況を確認します。
OceanBaseのソース側にデータを書き込み、MySQLのターゲット側でデータの同期状況を確認します。
機能制限
同期するテーブルには主キーが必要です。主キーのないテーブルをソース側で削除すると、ターゲット側に同期された際にテーブル全体が削除されます。
DDLでは、テーブルの新規作成と列の追加をサポートします。