大数据实时监控mysql数据库binlog(一)

MySQL之binlog

参考连接:https://www.cnblogs.com/xhyan/p/6530861.htmlhttps://www.cnblogs.com/martinzhang/p/3454358.html

1>> MySQL Binlog详解

Mysql的binlog日志作用是用来记录mysql内部增删改查等对mysql数据库有更新的内容的记录(对数据库的改动),对数据库的查询select或show等不会被binlog日志记录;主要用于数据库的主从复制以及增量恢复。

mysql的binlog日志必须打开log-bin功能才能生存binlog日志

2>> Mysqlbinlog解析工具

Mysqlbinlog功能是将Mysql的binlog日志转换成Mysql语句,默认情况下binlog日志是二进制文件,无法直接查看。

3>> MySQL binlog的三种工作模式

(1)Row level

日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改。

优点:能清楚的记录每一行数据修改的细节

缺点:数据量太大

 

(2)Statement level(默认)

每一条被修改数据的sql都会记录到master的bin-log中,

slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql再次执行

优点:解决了 Row level下的缺点,不需要记录每一行的数据变化,
减少bin-log日志量,节约磁盘IO,提高新能

缺点:容易出现主从复制不一致

 

(3)Mixed(混合模式)

结合了Row level和Statement level的优点

 

4>> MySQL企业binlog模式的选择

互联网公司使用MySQL的功能较少(不用存储过程、触发器、函数),选择默认的Statement level

用到MySQL的特殊功能(存储过程、触发器、函数)则选择Mixed模式

用到MySQL的特殊功能(存储过程、触发器、函数),又希望数据最大化一直则选择Row模式

为什么要引入mysql的binlog呢?

如果上面叙述的不是很清楚,请自己手动查资料,如果不是因为搞实时的项目,我也不想玩这个坑爹的玩意儿。搞了一星期,从压根不知道有这个东西到做出成品。

下面我来介绍一下解析binlog的第一个中间件,就是canal

 

canal是什么?

Canal:(阿里巴巴)--(服务端)+ 外置客户端   

           纠正一句:(以前是这样,现在已经很完善了,现在canal也支持了输出到kafka等相关消息队列里了!)

官方地址:

https://github.com/alibaba/canal/wiki/Introduction

Github地址:

https://github.com/alibaba/canal

解析canal客户端(外置客户端):

https://github.com/sasou/syncClient

 

名称:canal [kə'næl] 译意: 水道/管道/沟渠

语言: 纯java开发

定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql

关键词: mysql binlog parser / real-time / queue&topic

工作原理

mysql主备复制实现

从上层来看,复制分成三步:master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);

slave将master的binary log events拷贝到它的中继日志(relay log);

slave重做中继日志中的事件,将改变反映它自己的数据。

 

canal的工作原理:

原理相对比较简单:

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

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

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

 

还有后续的哦!

https://blog.csdn.net/MrZhangBaby/article/details/87635420

https://blog.csdn.net/MrZhangBaby/article/details/87636104

猜你喜欢

转载自blog.csdn.net/MrZhangBaby/article/details/87634152