一、基本概念
1.什么是 BinLog
BinLog是MySQL数据库的二进制日志,用于记录数据库的变更操作。它以二进制格式存储,并按照事件的顺序进行记录。
2.BinLog的作用和优势
- 提供了数据库级别的日志,可以追踪数据库的变更历史。
- 支持数据的增删改操作,以及表结构的变更。
- 可以用于数据恢复、数据复制、数据同步等场景。
- 提供了对数据库操作的审计功能。
- 可以用于实时监控和分析数据库的变更情况。
3.BinLog的组成部分
- 事件(Event):BinLog中的最小记录单元,表示一个数据库操作。
- 日志文件(Log File):BinLog以日志文件的形式进行存储,每个日志文件包含多个事件。
- 事件格式(Event Format):BinLog支持多种事件格式,如基于语句的格式和基于行的格式。
- 事件内容(Events Data):每个事件记录了相应数据库操作的详细信息,如操作类型、表名、数据内容等。
4.BinLog的事件类型
- 查询事件(Query Event):记录了执行查询语句的事件。
- 更新事件(Update Event):记录了对表中数据进行更新的事件。
- 插入事件(Insert Event):记录了向表中插入数据的事件。
- 删除事件(Delete Event):记录了从表中删除数据的事件。
- 表结构变更事件(Alter Event):记录了对表结构进行修改的事件。
- 其他事件类型:还有其他类型的事件,如事务事件、DDL事件等。
二、Spring Boot项目中的常用组件
中间件
##1.Canal
Canal是阿里巴巴开源的基于MySQL的BinLog解析和同步组件。它可以从MySQL的BinLog中解析出数据库的变更事件,并将其同步到其他存储或消息队列中。Canal提供了与Spring Boot的集成支持,可以方便地在Spring Boot项目中监听和消费BinLog事件。
##2.Maxwell
Maxwell是一个开源的BinLog解析工具,它可以读取MySQL的BinLog并将其转换为易于消费的JSON格式。Maxwell提供了对BinLog事件的监听和处理功能,并支持将事件转发到消息队列、Kafka等目标系统。它也提供了与Spring Boot的集成,方便在Spring Boot应用中监听和处理BinLog事件。
SDK
mysql-binlog-connector-java
mysql-binlog-connector-java是一个用于Java应用程序的MySQL BinLog监听库。它是MySQL官方提供的一个开源项目,用于实时监听MySQL的BinLog并将事件传递给应用程序。
#三、mysql-binlog-connector-java的示例代码
public static void main(String[] args) throws IOException {
BinaryLogClient client = new BinaryLogClient("172.16.4.247", 6006, "micpdb","micpbinlog", "micpbinlog");
EventDeserializer eventDeserializer = new EventDeserializer();
eventDeserializer.setCompatibilityMode(
EventDeserializer.CompatibilityMode.DATE_AND_TIME_AS_LONG,
EventDeserializer.CompatibilityMode.CHAR_AND_BINARY_AS_BYTE_ARRAY
);
client.setEventDeserializer(eventDeserializer);
// client.registerEventListener(new BinaryLogClient.EventListener() {
// @Override
// public void onEvent(Event event) {
//
// }
// });
client.registerEventListener(event -> {
EventHeader header = event.getHeader();
EventData data = event.getData();
if (data instanceof UpdateRowsEventData){
System.out.println("当前修改类型"+header.getEventType());
}
});
client.connect();
}