使用mysql的binlog进行监控有什么意义

之前学习过mysql的binlog,知道他主要是用来主从之间的复制来保证主从数据的一致性。除此之外还可以用来恢复数据。但是最近公司在做一个项目是利用mysql的binlog进行监控,我实在是好奇(这个项目不是我做的)通过binlog可以监控什么?我大致了解了一下阿里好像有个成熟的项目canal是专门做这个的。那么监控binlog对整个系统有什么重要的意义呢,通过监控binlog我们又能发现什么问题呢?

阅读 3.8k
4 个回答

不清楚你的项目里是如何做的, 根据 binlog 记录内容, 监控 binlog 至少可以做以下事情:

  1. sql 执行情况统计, 执行频率等.
  2. 日志使用情况, 可用于增量备份管理.
  3. 特殊情况报警, 如日志不兼容情况,某些语句和函数如UUID, LOAD DATA INFILE等在复制过程可能导致数据不一致甚至出错.

我觉得贵司使用canal可能不仅仅为了监控吧。在我看看来,使用它更多的可能是需要实现一些数据的同步操作(实时增量备份,实时缓存数据更新,实时增量数据处理)。从业务上来看更多的是为了解耦,毕竟不需要修改现有业务代码就可以通过canal的订阅和消费来实现其他业务还是很赞的。

题主可以去了解一个词语:CDC,即Change Data Capture,可以看成一种软件设计模式,也可以看成是一种数据变更的集成方式吧,基本上@yijianlingchen 的描述也很全面了,实现CDC有很多的方法, transaction log只是其中一种,不过也是比较常用的方案,不同数据库实现CDC也很多差异,当然也早已经有很多开源的,比如debezium

如果题主想了解很多,可以看看上面涉及的链接,嘿嘿

说一个刚做过的事。重构一个老系统的部分模块,这个模块之前分散在其他三个服务里,要统一到一个,重新设计了数据库结构。
那么问题来了,要在灰度发布期间把老的数据也同步到新库里,两个方案。
一,在每个服务里面更新旧数据库的地方,加逻辑发通知。这样做需要改三个服务的代码,并且回归测试,谁也无法保证改的代码不会影响到其他逻辑。
二,就是binlog监控,用的canal,这样老的代码一行都不用改,收到更新旧表的binlog直接更新新表,性价比很高。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题