OB CloudのBinlogサービスは、OceanBaseデータベースのClog(Commit Log)を収集し、MySQL Binlogに変換するサービスです。主にリアルタイムデータサブスクリプションなどのシナリオで利用されます。
背景
MySQL Binlogは、マスター/レプリカレプリケーションとデータサブスクリプションを実現するための出発点です。低いパフォーマンスと消費でBinlogログを有効にでき、既存のMySQL Binlog増分解析システムを再利用してOceanBaseデータベースのMySQL互換モードテナントの増分データを同期できます。これにより、再開発や新しい環境の構築は不要です。元々MySQLベースの増分データサブスクリプションソリューションを使用していた場合でも、OB Cloudへの切り替えがシームレスに行えます。
注意
OceanBaseが提供するBinlogサービスは、現在のところプライマリ/スタンバイ構成や増分復元などのシナリオには適用できません。
制限事項
パフォーマンス制限
業務負荷が制御可能な範囲内であれば、Binlog変換サービスの遅延は通常1秒以内に保てます。ただし、データベースで頻繁なデータ定義言語(DDL)操作や大規模トランザクションが発生するなど、特殊な状況では絶対的な秒単位の変換遅延を保証することはできません。
バージョン要件
Binlogサービスへの接続には、各サービスのバージョンに以下の要件があります:
OBServer V3.x系ではV3.2.4.4以上、V4.x系ではV4.1.0.1以上が必要です。
OBProxyではV4.2.1以上が必要です。
BinlogサービスのバージョンはV2.3.0以上が必要です。
説明
- BinlogサービスとOBProxyのバージョンには連携関係があります。
- OBProxyを介してOceanBase Cloudに接続した後でないと、Binlogデータを取得できません。
- OBProxyもバージョン要件を満たしている必要があります。
- より高いバージョンのBinlogサービスほど多くの機能を提供し、以前のバージョンで知られていた問題も修正されています。そのため、最新のBinlogサービスバージョンの使用を推奨します。
SQL互換性
OceanBaseデータベースのMySQL互換モードテナントは、MySQLの大部分のデータ型と互換性があります。詳細については、OceanBase MySQLデータ型の概要をご参照ください。ただし、OceanBaseデータベースのMySQL互換モードテナントのDDL構文はMySQLのDDL構文とは一部異なり、OceanBaseデータベースのMySQL互換モードテナント特有の拡張構文が存在します。このようなDDL構文は、MySQL Binlogプロトコルでは解析できない可能性があります。
データ型
以下のOceanBaseデータベースのMySQL互換モードテナントの超集合定義の意味は、MySQL Binlogプロトコルでは表現できません。
OceanBaseデータベースのMySQL互換モードテナント内部でのENUM型やSET型の拡張意味の実装はサポートされていません。例えば、SET型で定義数が64個を超える場合、重複をサポートする場合、ENUM型に未定義データ(例:'')を挿入する場合などです。
VARCHAR型は最大で65,535バイトのデータを格納できます。VARCHAR型の長さがこの値を超えると、対応するテーブルデータの解析に異常が発生する可能性があります。
注意
文字セットの設定は、VARCHARの長さの設定に影響する場合があります。例えば、utf8mb4タイプでは1文字が4バイトを占有するため、VARCHARの最大サポート長は16383になります。
OceanBaseデータベースのMySQL互換モードテナントでは、LONGBLOB型とLONGTEXT型の最大サイズは48MBであり、MySQLの型とは異なります。
機能の概要
BinlogサービスはMySQL BinlogのRow形式と互換性があります。各行データの変更を最小単位として記録します。
OceanBaseデータベースのバージョンがV4.xの場合は、生成列にSTORED属性を設定してください。設定しない場合、Binlogは対応する生成列データを変換せず、下流のサブスクリプション解析失敗やデータ損失を引き起こす可能性があります。
OceanBaseデータベースのMySQL互換モードテナントのBinlogプロトコルは、MySQLデータベースV5.7と基本的に一致しており、主な仕様は以下の通りです:
filename + offsetとGTIDの2種類の抽出モードをサポートします。GTIDはOceanBaseデータベースのMySQL互換モードテナントのBinlogサービスによって生成され、同様にグローバルで一意です。
server-idを用いて区別します。現在のシングルレプリカアーキテクチャでは、server-idは固定されています。クラスタ化がサポートされた後は、異なるserver-idが存在する可能性があります。
全データベースおよび全テーブルのBinlogログの読み取りをサポートします。OceanBaseデータベースのMySQL互換モードテナントのBinlogサービスは、テナント単位で全データベース・テーブルの増分データをBinlogログにダンプし、永続的に保存します。
複数のBinlog Dumpサブスクリプション接続をサポートし、[最小Binlogログポイント、最新ポイント]の範囲内の任意のポイントを指定してサブスクリプションを行うことができます。
主流のMySQL Binlog解析エコシステムツール(例:flinkcdc、Canal、MaxWell)とBinlogサービスの連携をサポートします。
Binlogは高可用性を備えており、障害発生時には数分単位で自動復旧が可能です。ただし、下流のサブスクライバー(Downstream Subscriber)は障害発生時にサブスクリプションが切断され、自動復旧できないことを避けるため、障害回復時に再接続できる機能を備えている必要があります。
既存データの同期について
Binlogサービスは増分データの同期サービスのみを提供しますが、OceanBaseデータベースのMySQL互換モードテナントから下流へのデータ同期には、既存データの同期も含まれる場合があります。以下では、既存データ同期段階でよくある事項について説明します:
増分スナップショット読み取りのみをサポートします。
テーブルロックスナップショット、FLUSH TABLES WITH READ LOCKはサポートしていません。
MySQL型の
interactive_timeout、warning_countタイムアウト時間パラメータの設定をサポートします。heart.intervalハートビートタイムアウトパラメータの設定をサポートします。パラレルで既存データを取得することをサポートします(MySQL同期コンポーネントがその機能を備えている場合)。
Binlogログの取得
接続方法:テナントのホストアドレスを使用して接続します。操作手順は以下の通りです:
Binlogサービスはデフォルトで無効な状態です。まず、Binlogサービスを購入する必要があります。詳細については、Binlogサービスの購入をご参照ください。
MySQL Clientを使用してOceanBaseデータベースに接続します。詳細については、MySQLクライアントを使用してOceanBaseテナントに接続するをご参照ください。
OceanBaseデータベースに接続した後、接続されたクライアントでMySQL Binlog関連のコマンドを実行します。
show binary logsコマンドを実行して、Binlogログファイルのリストを確認します。
show master statusコマンドを実行して、現在書き込まれているBinlogファイルを確認します。
show binlog eventsステートメントを実行して、Binlogファイル内の具体的なイベント情報を確認します。
Binlogログをサブスクライブします。
ユーザーのMySQL Binlogエコシステムツールは、OBProxyを介して指定されたテナントのBinlog Dumpコマンドを送信し、それをBinlogサービスに転送します。
BinlogサービスはBinlog Dumpコマンドを受信すると、内部でBinlog Dumpスレッドを起動して指定されたテナントのBinlogログファイルを読み取り、その後OBProxyを経由して下流に転送します。