用java玩转mysql主从备份机制之binlog

小陈博主 2017-11-14 19:09:35

用java玩转mysql主从备份机制之binlog

前言碎语

早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,产出了canal项目。canal的原理很简单,就是如上图片所示

  • canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议

  • mysql master收到dump请求,开始推送binary log给slave(也就是canal)

  • canal解析binary log对象(原始为byte流)

但是今天博主要分享的不是canal,上面只是作为一个引子,因为canal的使用还是比较复杂,不仅需要客户端写消费逻辑,还需要部署一套canal的server端,server还依赖的zookeeper组件。所以,今天博主先来介绍一个超级简单mysql binlog消费组件来预热预热,看文章反响,如果有需要后面会继续canal和更加产品级的项目otter。

什么是binlog?

binlog基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中;

mysql中的binlog?

MySQL的binlog作用类似于Oracle的归档日志,可以用来查看数据库的变更历史(具体的时间点所有的SQL操作)、数据库增量备份和恢复(增量备份和基于时间点的恢复)、Mysql的复制(主主数据库的复制、主从数据库的复制)

开启mysql的binlog?

log-bin=mysql-bin #添加这一行就ok

binlog-format=row #选择row模式

server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

在mysql的my.ini配置文件中加上如上配置后重启mysql

验证是否开启binlog?

用java玩转mysql主从备份机制之binlog

bog_bin为NO表示数据库已开启

创建项目,加入binlog消费组件?

<dependency> 
<groupId>com.github.shyiko</groupId> 
<artifactId>mysql-binlog-connector-java</artifactId> 
<version>0.9.0</version>
</dependency>

连接mysql,监听数据库操作?

用java玩转mysql主从备份机制之binlog

数据库sql测试脚本?

用java玩转mysql主从备份机制之binlog

回到程序看到已经监听到数据库操作了

用java玩转mysql主从备份机制之binlog

典型的应用场景

除了很多主从备份,主从复制等产品外,应用在同步msyql数据库数据到ElasticSearch,solr等索引引擎等使用也是非常的nice啊

文末彩蛋

往期精彩内容回顾

(1)IDEA之dubbo注册中心zookeeper可视化插件

(2)java基于redis客户端redisson的RPC远程服务调用

(3) java搜索引擎Apache的solr初探-安装使用导入mysql数据

(4) SQL解析优化神器-SQLAdvisor

(5)spring boot集成WebSocket实时输出日志到web页面

没关注可以关注一波,后面还会陆续发布更多java等web领域开发相关的精彩内容哦

猜你喜欢

转载自blog.csdn.net/u011277123/article/details/78869990