<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java binlog是什么,让我们一起了解一下?
binlog是记录所有数据库表结构变更以及表数据修改的二进制日志,而java代码中可以通过地方的类库提供的方法去监听日志文件中的时间变化,当日志中出现增删改时可以在java中监听到,从而进行一些对缓存等内容的自动修改。
如何打开binlog?
在mysql的目录下etc/my.conf或者my.ini文件中的[mysqld]标签下添加以下配置:
log-bin=mysql-binbinlog-format=Rowserver_id=201903
那么在java中是如何监听binlog日志的?
文件pom地址:
<dependency> <groupId>com.github.shyiko</groupId> <artifactId>mysql-binlog-connector-java</artifactId> <version>0.13.0</version></dependency>
引入文件后:
//配置连接(指定数据库的地址,端口号,账号,密码)BinaryLogClient logClient = new BinaryLogClient( "127.0.0.1", 3306, "root", "123456");//注册事件监听器(可以对不同日志变更进行不同的操作逻辑)logClient.registerEventListener(event -> { EventData data = event.getData(); //如果日志是更新记录 if(data instanceof UpdateRowsEventData){ System.out.println("update"); }else if(data instanceof WriteRowsEventData){ //写操作 System.out.println("write"); }else if(data instanceof DeleteRowsEventData){ //删除操作 System.out.println("delete"); }});//开始连接监听logClient.connect();
拓展一下:binlog还有这三个用途,分别为恢复、复制、审计。
恢复:创建的库突然消失,可以用来恢复数据。
复制:从库有两个线程,一个I/O线程,一个SQL线程,I/O线程读取主库传过来的binlog内容并写入到relay log,SQL线程从relay log里面读取内容,写入从库的数据库。
审计:用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入攻击。