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()));
}
}

浙公网安备 33010602011771号