OceanBase Binlog 服务能否对部分sql不写binlog

【 使用环境 】生产环境
【 OB or 其他组件 】 OceanBase Binlog
【 使用版本 】obbinlog-ce-4.0.1-1
【问题描述】
通过obbinlog-ce-4.0.1-1对ob变更产生的日志转换为binlog日志,使用MySQL 8模拟slave接入ob proxy获取增量数据。
在ob执行租户参数设置或OB自动执行清理命令’PURGE TABLE _recycle$_205222_1733296246809608’,产生的binlog日志在mysql进行回放,导致slave_sql线程异常,阻塞后续SQL执行。

2 个赞

使用MySQL 8模拟slave接入ob proxy 指的是什么

把ob上的表数据变更应用到mysql上

提供一下日志

binlog 还是什么日志?

run/${instance_name}/log ,确认该目录中的文件是否包含 ERROREDIAG 信息

OceanBase Binlog 服务本身在正常产生日志,只是设置参数、清理回收站这类日志不是业务类表变更,mysql拿到这些日志进行回放会报错。能否对这类在mysql无法执行的操作 不产生binlog

1 个赞

mysql自身产生binlog日志么?

一起来看看 日志

部分 obcdc 版本可以支持到表级别的同步粒度,如果你使用的 OB 版本对应的 obcdc 支持,可以使用 CREATE BINLOG INSTANCE 或 ALTER BINLOG INSTANCE 的 EXTRA_OBCDC_CFG 指定 obcdc 的 tb_black_list,https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001576795

比如

CREATE BINLOG INSTANCE instance_name FOR cluster.tenant 
    CLUSTER_URL="xxxx", 
    START_TIMESTAMP=xxxx,
    EXTRA_OBCDC_CFG="tb_black_list=tenant.*.*_recycle*";

除此之外目前暂时没有其他的过滤方式,需要您在消费日志的应用里做过滤。

如果用同步表的白名单tb_white_list模式,可能要经常新增表,有调整BINLOG INSTANCE 的语法吗?调整过程中,会丢失变更的binlog日志吗?

怎么检查ob binlog v4.0.1的obcdc版本呢?我用的ob 4.2.1.9,看支持表级别同步粒度。但是创建binlog instance时,这么指定黑名单不能正常创建


需要检查的是 OB 的版本,obbinlog 这边会根据 OB 的版本选择对应的 obcdc。使用这个参数的时候要用 CREATE BINLOG INSTANCE 命令,也就是按照单个 Binlog 实例去创建或者修改。

1 个赞

使用CREATE BINLOG INSTANCE 命令创建确实可以指定黑名单了,感谢老师。我们之前用mysql 8.0.x作为客户端接入ob binlog,创建用户这类语法产生的binlog跟mysql 8不兼容CREATE USER if not exists test_a IDENTIFIED BY PASSWORD ‘*a02aa727cf2e8c5e6f07a382910c4028d65a053a’;(多了个PASSWORD)

现在用mysql5.7接入ob binlog,发现Slave_IO_Running线程异常了,提示Relay log write failure: could not queue event from master,看起来仍是版本问题。如果下游接mysql的话,有建议的mysql版本吗

目前 OB 的 Binlog 服务主要兼容的是生态工具,比如 canalFlink MySQL CDC 以及 mysql-binlog-connector-java 这些。

直接用 MySQL 来接这种用法我们没有详细测过,推测目前 5.x 和 8.x 上应该都还是会有些兼容性问题的,所以不太推荐这么用。

来看看