之前学习过mysql的binlog,知道他主要是用来主从之间的复制来保证主从数据的一致性。除此之外还可以用来恢复数据。但是最近公司在做一个项目是利用mysql的binlog进行监控,我实在是好奇(这个项目不是我做的)通过binlog可以监控什么?我大致了解了一下阿里好像有个成熟的项目canal是专门做这个的。那么监控binlog对整个系统有什么重要的意义呢,通过监控binlog我们又能发现什么问题呢?
之前学习过mysql的binlog,知道他主要是用来主从之间的复制来保证主从数据的一致性。除此之外还可以用来恢复数据。但是最近公司在做一个项目是利用mysql的binlog进行监控,我实在是好奇(这个项目不是我做的)通过binlog可以监控什么?我大致了解了一下阿里好像有个成熟的项目canal是专门做这个的。那么监控binlog对整个系统有什么重要的意义呢,通过监控binlog我们又能发现什么问题呢?
我觉得贵司使用canal可能不仅仅为了监控吧。在我看看来,使用它更多的可能是需要实现一些数据的同步操作(实时增量备份,实时缓存数据更新,实时增量数据处理)。从业务上来看更多的是为了解耦,毕竟不需要修改现有业务代码就可以通过canal的订阅和消费来实现其他业务还是很赞的。
题主可以去了解一个词语:CDC
,即Change Data Capture,可以看成一种软件设计模式,也可以看成是一种数据变更的集成方式吧,基本上@yijianlingchen 的描述也很全面了,实现CDC
有很多的方法, transaction log
只是其中一种,不过也是比较常用的方案,不同数据库实现CDC
也很多差异,当然也早已经有很多开源的,比如debezium
如果题主想了解很多,可以看看上面涉及的链接,嘿嘿
说一个刚做过的事。重构一个老系统的部分模块,这个模块之前分散在其他三个服务里,要统一到一个,重新设计了数据库结构。
那么问题来了,要在灰度发布期间把老的数据也同步到新库里,两个方案。
一,在每个服务里面更新旧数据库的地方,加逻辑发通知。这样做需要改三个服务的代码,并且回归测试,谁也无法保证改的代码不会影响到其他逻辑。
二,就是binlog监控,用的canal,这样老的代码一行都不用改,收到更新旧表的binlog直接更新新表,性价比很高。
15 回答8.4k 阅读
7 回答5.3k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
不清楚你的项目里是如何做的, 根据 binlog 记录内容, 监控 binlog 至少可以做以下事情: