准备使用canal来监听MySQL表的变化, 但是QuickStart文档中写到
“对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式”
但是我这边要监听的生产服务器MySQL(5.6.32)的binlog_format为STATEMENT, 这种情况下还能用canal吗?
业务背景:
有一个主题表 topic 以及 关联表(即主题下的文章) topic_relation
不管主题本身的变更 还是 主题关联关系的更新 如 新增文章、删除文章 都需要通知下游 重新刷新该主题的静态页
可以使用 Canal 监听基于
STATEMENT
格式的 MySQL binlog,但需要注意一些潜在的问题。在STATEMENT
格式下,MySQL 会记录每个语句的 SQL 命令,并将其作为 binlog 事件写入 binlog 中。当使用 Canal 解析基于STATEMENT
格式的 binlog 时,它会解析并提取每个 SQL 语句,并将其转换为相应的数据操作。但是,由于某些原因(例如函数或触发器),SQL 命令可能不会准确反映实际执行的数据操作,这可能导致 Canal 解析出的数据不正确。为了避免这种情况,建议将 MySQL 的 binlog_format 设置为
ROW
格式,这将直接记录对行数据的更改,而不是记录对数据执行的 SQL 命令。这样 Canal 将能够准确地解析每个更改事件,并将其转换为相应的数据操作。多谢! 准备修改生产MySQLbinlog-format为ROW 然后找个晚上给重启下