实时监听数据库变化

一些概念

CDC : Change Data Capture(改变数据捕获),可以识别提取从上次提取之后发生变化的数据

cdc 的两种模式:

  同步:同步cdc主要是采用触发器 记录新增数据,基本能够做到实时增量提起

  异步:异步cdc 通过分析已经提交的日志记录来得到增量数据信息,有一定的延时,并且提供了到 oracleStreams 的接口

源表(Source Table):业务数据库需要捕获数据的源表

变化表(Change Table):保存从源表捕获的变化数据

Mysql Binlog 研究

mysql-binlog 是mysql 数据库的二进制日志,用于记录用户对数据库操作的 sql 语句(除了查询语言)。可以使用mysql bin 命令查询二进制内容

binlog 的格式有三种: Statement,Row,Mixed

 windows 下mysql5.7 启动 binlog : 参考

如何使用mysql binlog : 参考

Statement: 记录的是执行的语句

Row: 记录的是每行的修改记录,可能会产生大量日志

Mixed: Statement 与 Row 的结合

01. 查看 binlog_format

show variables like 'binlog_format'

 02.查看是否开启 binlog

show variables like 'log_bin'

 如果binlog没有开启,可以通过set sql_log_bin=1命令来启用;如果想停用binlog,可以使用set sql_log_bin=0

03.获取 binlog 文件列表

show binary logs

 04.查看当前正在写入的 binlog 文件

show master status

 05.查看第一个binlog日志内容

show binlog events

查看指定binlog 文件内容

show binlog events in 'mysql-bin.000002'

当停止或重启服务器时,服务器会把日志文件记入下一个日志文件,Mysql会在重启时生成一个新的日志文件,文件序号递增;此外,如果日志文件超过max_binlog_size(默认值1G)系统变量配置的上限时,

也会生成新的日志文件(在这里需要注意的是,如果你正使用大的事务,二进制日志还会超过max_binlog_size,不会生成新的日志文件,事务全写入一个二进制日志中,这种情况主要是为了保证事务的完整性);

日志被刷新时,新生成一个日志文件。

flush logs

使用 binlog:

 06.如何解析binlog(https://www.percona.com/blog/2016/09/13/mysql-cdc-streaming-binary-logs-and-asynchronous-triggers/

   将binlog 事件保存到mysql 文档存储或者mongodb

   对二进制日志时间做出反应:异步触发器

 maxwell 是一个实时抓取mysql  二进制日志 binlog ,并生成 json 格式的消息,作为生产者发送给kafka ,kinesis,rabitmq 等,参考 https://blog.csdn.net/wwwdc1012/article/details/88388552

 除此之外,目前常用的 mysql binlog 解析工具主要有: canal , mysql_Streamer

  

canal 由 Java 开发,分为服务端与客户端,拥有众多的衍生程序,canal 需要自己编写客户端消费canal 解析到的数据。

maxwell 相对 canal 的优势是使用简单,将数据变更输出未 json 字符串,不需要编写客户端。

  

原文地址:https://www.cnblogs.com/baizhuang/p/11698100.html