Canalは、オープンソースのデータベース変更ログ解析ツールであり、主にMySQLデータベースに基づく増分データのサブスクリプションと消費に利用されます。Canalは、データのリアルタイム同期および異種システム間のデータ統合を実現するために主に使用されます。
本記事では、CanalのCanal ServerとCanal Adapterコンポーネントを使用して、OB CloudのMySQL互換モードテナント間でデータを同期する方法について説明します。
背景
Canal Server
MySQLデータベースへの接続を担当し、MySQLスレーブの動作を模倣してデータベースのBinlogログファイルを解析し、変更データを抽出して処理しやすい形式で下流の消費者に提供します。
Canal Adapter
Canalの拡張コンポーネントであり、Canal Serverが解析したデータ変更をマッピングして、RDBMS(リレーショナルデータベース)、Elasticsearch、HBaseなど、さまざまなタイプの下流データストレージに転送します。
Canalの詳細については、CanalのGitHubリンクをご参照ください。
前提条件
データを同期する前に、以下の情報を確認してください:
- OB Cloud MySQLのBinlogが有効になっていることを確認してください。詳細については、手順をご参照ください。
- Java 1.8以降のバージョンがインストールされていることを確認してください。
- Canal Serverがインストールされていることを確認してください。
- Canal Adapterがインストールされていることを確認してください。
- ターゲットのOB Cloudデータベースに必要なテーブル構造を作成し、ソースデータベースと同一であることを確認してください。
操作手順
以下の手順に従って、OB Cloud MySQL互換モードテナント間でデータを同期してください:
OB CloudのBinlogサービスを有効にします。 Binlogサービスを有効にするパス:インスタンスリスト -> テナント管理 -> Binlogサービスで、「開始」をクリックします。詳細については、Binlogサービスの開始をご参照ください。
データ同期用のユーザーを作成します。
CREATE USER 'ユーザー名'@'%' IDENTIFIED BY 'パスワード'; GRANT SELECT ON *.* TO 'ユーザー名';Canal Serverを設定します。
conf/example/instance.propertiesファイルを変更し、OB Cloud MySQLのアドレス、ポート、ユーザー名、パスワード、および監視対象のデータベースとテーブルを設定します。Canalサービスを起動し、そのログを監視して正常に動作していることを確認します。サンプル設定ファイルは以下のとおりです:vi conf/example/instance.properties# OB Cloud MySQLデータソースの接続情報を設定します canal.instance.master.address=送信元OB Cloud MySQLサーバーのアドレス:ポート canal.instance.dbUsername=ユーザー名 canal.instance.dbPassword=パスワード # その他のパラメータはデフォルトのままにしますCanal Serverを起動します。
cd /Canal_Home/canal && sh bin/startup.shログファイルを確認し、Canal Serverが正常に起動したことを確認します:
tail -f logs/canal/canal.logCanal Adapterを設定します。 Canal Adapterの設定ディレクトリ
confに移動し、application.yml設定ファイルを編集して、rdb Adapterのプロパティを設定します:mode: tcp #tcp kafka rocketMQ rabbitMQ dataSourceKey: defaultDS destination: example groupId: g1 outerAdapters: - name: rdb key: mysql1 properties: jdbc.driverClassName: com.mysql.cj.jdbc.Driver jdbc.url: jdbc:mysql://宛先MySQLアドレス:ポート/宛先データベース名?useUnicode=true&characterEncoding=UTF-8&useSSL=false jdbc.username: 宛先データベースのユーザー名 jdbc.password: 宛先データベースのパスワードCanal Adapterはさまざまなタイプのデータストレージシステムをサポートしており、各タイプに対応するAdapterがあります。RDB AdapterはCanal Adapterの一部であり、リレーショナルデータベース間のデータ同期に特化しています。RDB(Relational Database)マッピングファイルの例は以下のとおりです:
cat conf/rdb/mytest_user.ymldataSourceKey: defaultDS destination: example groupId: g1 outerAdapterKey: mysql1 concurrent: true dbMapping: database: 送信元データベース名 table: 送信元テーブル名 targetTable: ターゲットデータベースのテーブル名 targetPk: id: 主キー列 mapAll: trueCanal Adapterを起動します。
cd /Canal_Home/adapter && sh bin/startup.shログファイルを確認し、Canal Adapterが正常に起動したことを確認します:
tail -f logs/adapter/adapter.logデータ同期を検証します。 ターゲットデータベースのテーブルを確認し、ソースデータが正常に同期されたかどうかを検証します。