1、添加依赖
<dependency> <groupId>com.github.shyiko</groupId> <artifactId>mysql-binlog-connector-java</artifactId> <version>0.21.0</version> </dependency>
2、开启mysql用户权限
3、开启binlog
/** * 连接mysqlBinLog */ public void connectMysqlBinLog() throws IOException { log.info("监控BinLog服务已启动"); //自己MySQL的信息。host,port,username,password BinaryLogClient client = new BinaryLogClient(mysqlIp, 3306, "mysql", mysqlPassword); /* * 因为binlog不是以数据库为单位划分的,所以监控binglog不是监控的单个的数据库,而是整个当前所设置连接的MySQL, *其中任何一个库发生数据增删改,这里都能检测到, *所以不用设置所监控的数据库的名字(我也不知道怎么设置,没发现有包含这个形参的构造函数) *如果需要只监控指定的数据库,可以看后面代码,可以获取到当前发生变更的数据库名称。可以根据名称来决定是否监控 **/ //下面直接照抄就行 client.registerEventListener(event -> { EventData data = event.getData(); if (data instanceof TableMapEventData) { //只要连接的MySQL发生的增删改的操作,则都会进入这里,无论哪个数据库 TableMapEventData tableMapEventData = (TableMapEventData) data; //可以通过转成TableMapEventData类实例的tableMapEventData来获取当前发生变更的数据库 System.out.println("发生变更的数据库:"+tableMapEventData.getDatabase()); System.out.print("TableID:"); //表ID System.out.println(tableMapEventData.getTableId()); System.out.print("TableName:"); //表名字 System.out.println(tableMapEventData.getTable()); } //表数据发生修改时触发 if (data instanceof UpdateRowsEventData) { System.out.println("Update:"); System.out.println(data.toString()); //表数据发生插入时触发 } else if (data instanceof WriteRowsEventData) { System.out.println("Insert:"); System.out.println(data.toString()); //表数据发生删除后触发 } else if (data instanceof DeleteRowsEventData) { System.out.println("Delete:"); System.out.println(data.toString()); } }); client.connect(); }