【 使用环境 】生产环境
【 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执行。
使用MySQL 8模拟slave接入ob proxy 指的是什么
把ob上的表数据变更应用到mysql上
提供一下日志
binlog 还是什么日志?
run/${instance_name}/log
,确认该目录中的文件是否包含 ERROR
、EDIAG
信息
OceanBase Binlog 服务本身在正常产生日志,只是设置参数、清理回收站这类日志不是业务类表变更,mysql拿到这些日志进行回放会报错。能否对这类在mysql无法执行的操作 不产生binlog
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 的版本,obbinlog 这边会根据 OB 的版本选择对应的 obcdc。使用这个参数的时候要用 CREATE BINLOG INSTANCE 命令,也就是按照单个 Binlog 实例去创建或者修改。
使用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 服务主要兼容的是生态工具,比如 canal 、 Flink MySQL CDC 以及 mysql-binlog-connector-java 这些。
直接用 MySQL 来接这种用法我们没有详细测过,推测目前 5.x 和 8.x 上应该都还是会有些兼容性问题的,所以不太推荐这么用。
来看看