binlog,java
<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裏面讀取內容,寫入從庫的數據庫。
審計:用户可以通過二進制日誌中的信息來進行審計,判斷是否有對數據庫進行注入攻擊。