canal监控binlog日志
binlog是在执行SQL语句时生成,用于数据库的主从复制和数据恢复工作
Redo log 记录了数据库页的物理修改,而非语句级别的逻辑操作,将事务的修改操作记录到 Redo log 中,可以确保在系统故障或崩溃发生时,已提交的事务能够被正确地重新执行,保证数据的一致性
Undo log 当我们执行一条 insert 语句时,Undo Log 就会记录一条相反的 delete 语句
用于事务回滚
canal https://blog.csdn.net/NeverFG/article/details/124053342 https://github.com/alibaba/canal/releases/tag/canal-1.1.6 修改mysql配置 cd /etc vi my.cnf log-bin=mysql-bin server-id=12345 #修改 canal.properties canal.id=1001 cd example/ #修改 instance.properties canal.instance.master.address=127.0.0.1:3306 canal.instance.dbUsername=canal canal.instance.dbPassword=Canal202! canal.instance.filter.regex=.*\\..* mysql创建用户 create user canal@'localhost' IDENTIFIED by 'Canal202!'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'localhost'; FLUSH PRIVILEGES; 我们这里使用的一个开源的项目,它实现了springboot与canal的集成。比原生的canal更加优雅。 https://github.com/chenqian56131/spring-boot-starter-canal 使用前需要将starter-canal安装到本地仓库(把提供的依赖拷贝到本地仓库即可) 我们可以参照它提供的canal-test,进行代码实现。 @EnableCanalClient canal.client.instances.example.host= 192.168.183.129 canal.client.instances.example.port= 11111 @CanalEventListener public class BusinessListener { /** * 设置监控点,监控的目标,对应库下的具体表 * @param entryType * @param rowData */ @ListenPoint(schema = "xmh",table = {"t_user"}) public void adUpdate(CanalEntry.EntryType entryType, CanalEntry.RowData rowData){ System.out.println("tb_ad表中的数据发生变化"); System.out.println("变化前的数据"); rowData.getBeforeColumnsList().forEach((c)-> System.out.println(c.getName()+":"+c.getValue())); System.out.println("变化后的数据"); rowData.getAfterColumnsList().forEach((c)-> System.out.println(c.getName()+":"+c.getValue())); } }