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%' ;

复制代码

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

c26d88174889a13c0a9f42923f067f75.png

查看正在写入的binlog状态:

7208cf793fbd85d7772adda53ff5631c.png

代码读取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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值