概述
Binlog 服务是用于收集 OceanBase 的事务日志并转换为 MySQL Binlog 的服务,主要用于实时数据订阅等场景。
背景信息
MySQL 在全球被广泛地使用,MySQL Binlog 是实现主从复制和数据订阅的起点,用户可以以较低的性能和消耗来开启 Binlog 日志,从而实现诸多的下游业务场景。为了更好地对接外部生态,OceanBase 推出了 MySQL Binlog 日志兼容能力。
Binlog 功能说明
OceanBase Binlog 服务以租户为管理单位,不支持对数据库、表开启 Binlog。
OceanBase Binlog 服务与 MySQL Binlog 的 Row 格式兼容。
以每一行数据的变更为最小单位进行记录。
支持基于 GTID 和基于位置的方式订阅。
限制说明
SQL 兼容性
由于 OB MySQL 的 DDL 语法与 MySQL DDL 语法存在一定的差异性,即 OB MySQL 有部分特有的拓展语法,这部分 DDL 语法可能无法解析。
数据类型
以下 OceanBase 的超集定义语义在 MySQL Binlog 协议中无法表达。
OB MySQL 针对 ENUM、SET 所实现的拓展语义不支持,比如 SET 定义数支持超过 64 个、支持重复、ENUM 支持插入未定义数据(比如'')等。
VARCHAR(65536) 定义不支持。
不支持 Gis 类型。
如何获取 Binlog
连接方式 | 版本要求 |
通过租户主地址连接 | OceanBase 数据库实例版本不小于 V3.2.4 |
OceanBase MySQL Binlog 默认为关闭状态,需要先开启 Binlog 服务,详情参见 开通 Binlog 日志服务。
通过 MySQL Client 连接到 OceanBase 数据库,详细步骤请参考 通过 MySQL 客户端连接 OceanBase 数据库。
连接上 OceanBase 数据库后,在已连接的客户端执行 MySQL Binlog 相关的命令。
show binary logs
show master status
show binlog events
通过 Canal 进行订阅,详细步骤请参考 QuickStart。
Canal 版本支持
版本 | 使用限制 | 备注 |
版本小于 canal 1.1.6 | 由于 canal 无法解析 OB 的超集语法,会导致触发 canal 的一个 issue。 | 可以通过替换对应版本的 parser jar 替换,需联系 OceanBase 技术人员获取。 |
canal 1.1.6 | 无法开启 tsdb,由于 canal 使用的 druid 版本无法解析 OB 的 Local 语法。 | 可以通过替换 druid 版本处理,需联系 OceanBase 技术人员获取。 |
canal 1.1.7 | 支持开启 tsdb,但是对于 OB 的分区表语法支持不全。 | 可以通过替换 druid 版本处理,需联系 OceanBase 技术人员获取。 |