OceanBase Cloudは、OceanBase Cloudのコミットログ(Clog)を収集してMySQL Binlog形式に変換するBinlogサービスを提供します。主にリアルタイムデータサブスクリプションなどのシナリオで利用されます。
背景情報
MySQL Binlogは、MySQLのプライマリ/レプリカレプリケーションとデータサブスクリプションの基盤です。パフォーマンスへの影響とリソース消費を抑えてBinlogサービスを有効にし、既存のMySQL Binlog増分解析システムを再利用して、OceanBase CloudのMySQL互換モードの増分データを同期できます。追加の開発や新しい環境の構築は不要です。既存のMySQL増分データサブスクリプションの仕組みをOceanBase Cloudに移行できます。
注意
OceanBaseが提供するBinlogサービスは、現在のところプライマリ/スタンバイ構成や増分リストアなどのシナリオには適用されません。
制限事項
パフォーマンス制限
業務負荷が適切に管理されている場合、Binlog変換サービスの遅延は通常1秒以内に抑えられます。ただし、データベースで頻繁なデータ定義言語(DDL)操作や大規模トランザクションが発生するなどの特殊な状況では、絶対的な秒単位の変換遅延を保証することはできません。
バージョン要件
Binlogサービスへの接続には、各サービスのバージョンに以下の要件があります:
OBServer V3.x系ではV3.2.4以上、V4.x系ではV4.1.0.1以上、V5.x系ではV5.0.1.0以上であること。
OBProxyではV4.3.1.17以上であること。
BinlogサービスのバージョンはV2.3.0より新しいバージョンであること。
説明
- BinlogサービスはOBProxy(ODP)と連携して使用します。
- OBProxyを経由してOceanBase Cloudに接続した場合にのみ、Binlogサービスが変換対象のClogを取得できます。
- OBProxyもバージョン要件を満たしている必要があります。
- より高いバージョンのBinlogサービスほど多くの機能を提供し、過去のバージョンで知られていた問題を修正しています。そのため、最新のBinlogサービスバージョンを選択することを推奨します。
- Binlogサービスの開始や設定変更時には、システムがOBProxyのバージョンを事前チェックします。OBProxyのバージョンが要件を満たしていない場合はBinlogサービスを開始できません。設定変更時にはアップグレードを促すメッセージが表示されますが、メッセージを確認すれば設定変更を続行できます。
SQL互換性
OceanBase CloudのMySQL互換モードは、MySQLの大部分のデータ型と互換性があります。詳細については、OceanBase MySQL データ型の概要を参照してください。OceanBase CloudのMySQL互換モードのDDL構文はMySQLとは異なり、一部の独自の拡張構文はBinlogサービスで解析できない可能性があります。
データ型
OceanBaseデータベースのMySQL互換モードテナントで拡張された以下のデータ型の仕様は、MySQL Binlogプロトコルでは表現できません。
OceanBaseデータベースのMySQL互換モードテナントで拡張されたENUM型やSET型の仕様はサポートされていません。例えば、SET型で定義数が64個を超える場合、重複をサポートする場合、ENUM型に未定義データ(例:'')を挿入する場合などです。
VARCHAR型は最大で65,535バイトのデータを格納できます。VARCHAR型の長さがこの値を超えると、対応するテーブルデータの解析に異常が発生する可能性があります。
注意
文字セットの設定はVARCHARの最大長の設定に影響を与える可能性があります。例えば、utf8mb4文字セットでは1文字が4バイトを占めるため、VARCHAR型の最大長は16,383になります。
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クライアントを使用してOceanBase Cloudに接続します。詳細については、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を経由して下流に転送します。