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

  

 

posted @ 2022-10-27 10:23  XUMT111  阅读(178)  评论(0编辑  收藏  举报