MySqL数据库监听命令_Mysql数据库监听binlog

前言

我们经常需要根据用户对自己数据的一些操作来做一些事情.

比如如果用户删除了自己的账号,我们就给他发短信骂他,去发短信求他回来.

类似于这种功能,当然可以在业务逻辑层实现,在收到用户的删除请求之后执行这一操作,但是数据库的binlog为我们提供了另外一种操作方法.

要监听binlog,需要两步,第一步当然是你的mysql需要开启这一个功能,第二个是要写程序来对日志进行读取.

mysql开启binlog.

首先mysql的binlog日常是不打开的,因此我们需要:

找到mysql的配置文件my.cnf,这个因操作系统不一样,位置也不一定一样,可以自己找一下,

在其中加入以下内容:

[mysqld]

server_id = 1

log-bin = mysql-bin

binlog-format = ROW

复制代码

之后重启mysql.

/ ubuntu

service mysql restart

// mac

mysql.server restart

复制代码

监测是否开启成功

进入mysql命令行,执行:

show variables like '%log_bin%' ;

复制代码

如果结果如下图,则说明成功了:

MySqL数据库监听命令_Mysql数据库监听binlog_第1张图片

查看正在写入的binlog状态:

MySqL数据库监听命令_Mysql数据库监听binlog_第2张图片

代码读取binlog

引入依赖

我们使用开源的一些实现,这里因为一些奇怪的原因,我选用了mysql-binlog-connector-java这个包,(官方github仓库)[github.com/shyiko/mysq…]具体依赖如下:

com.github.shyiko

mysql-binlog-connector-java

0.17.0

复制代码

当然,对binlog的处理有很多开源实现,阿里的cancl就是一个,也可以使用它.

写个demo

根据官方仓库中readme里面,来简单的写个demo.

public static void main(String[] args){

BinaryLogClient client = new BinaryLogClient("hostname", 3306, "username", "passwd");

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){

// TODO

dosomething();

logger.info(event.toString());

}

});

client.connect();

}

复制代码

这个完全是根据官方教程里面写的,在onEvent里面可以写自己的业务逻辑,由于我只是测试,所以我在里面将每一个event都打印了出来.

之后我手动登录到mysql,分别进行了增加,修改,删除操作,监听到的log如下:

00:23:13.331 [main] INFO util.MysqlBinLog - Event{header=EventHeaderV4{timestamp=0, eventType=ROTATE, serverId=1, headerLength=19, dataLength=28, nextPosition=0, flags=32}, data=RotateEventData{binlogFilename

你可能感兴趣的:(MySqL数据库监听命令)