暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

java 监听mysql 的 log_bin日志

干货食堂 2022-06-05
2238


需求,监控mysql的事件操作,比如插入数据,删除数据,更新数据,只要mysql的数据发生变化,就能监听到。然后实现我们的业务操作。


首先要开启log_bin日志。 


设置mysql的配置文件,修改my.ini 文件,添加下面这些配置,然后重启mysql

    [mysqld]


    # 开启log_bin
    server_id=2
    #设置日志三种格式:STATEMENT、ROW、MIXED 。
    binlog_format = mixed
    #设置日志路径,注意路经需要mysql用户有权限写
    log-bin = D:/devtool/phpstudy_pro/Extensions/MySQL5.7.26/log/mysql-bin.log
    #设置binlog清理时间
    expire_logs_days = 7
    #binlog每个日志文件大小
    max_binlog_size = 100m
    #binlog缓存大小
    binlog_cache_size = 4m
    #最大binlog缓存大小
    max_binlog_cache_size = 512m


    JAVA代码实现监听

      <dependency>
      <groupId>com.github.shyiko</groupId>
      <artifactId>mysql-binlog-connector-java</artifactId>
      <version>0.13.0</version>
      </dependency>


        import com.github.shyiko.mysql.binlog.BinaryLogClient;
        import com.github.shyiko.mysql.binlog.event.DeleteRowsEventData;
        import com.github.shyiko.mysql.binlog.event.EventData;
        import com.github.shyiko.mysql.binlog.event.TableMapEventData;
        import com.github.shyiko.mysql.binlog.event.UpdateRowsEventData;
        import com.github.shyiko.mysql.binlog.event.WriteRowsEventData;


        import java.io.IOException;


        public class TestBin {
        public static void main(String[] args) {
        BinaryLogClient client = new BinaryLogClient("localhost", 3306, "root", "123456");
        client.setServerId(2);
        client.registerEventListener(event -> {
        EventData data = event.getData();
        System.out.println("data:" + data);
        if (data instanceof TableMapEventData) {
        System.out.println("Table:");
        TableMapEventData tableMapEventData = (TableMapEventData) data;
        System.out.println(tableMapEventData.getTableId() + ": [" + tableMapEventData.getDatabase() + "-" + 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());
        }
        });
        try {
        client.connect();
        } catch (IOException e) {
        e.printStackTrace();
        }
        }
        }






        创作不易,如果对你有帮助,麻烦三连。点赞,在看,转发。







        文章转载自干货食堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论