目录

一、什么是Binlog

二、Binlog文件记录模式

三、Binlog 日志内容

四、常用的binlog日志操作命令

五、binlog日志中间件


一、什么是Binlog

Binlog (Binary log)是MySQL的二进制日志,以二进制的形式记录了对于数据库的变更(DDL,DML,DCL)不包括select和show 操作。Binlog日志是以事件形式记录,还包含语句执行的消耗时间。

Binlog主要的使用场景:

1. 用来查看mysql变更:通过mysqlbinlog工具来查看变更。

2. MySQL的备份恢复:通过mysqlbinlog工具来恢复数据。

ps: 数据库备份其他方法,如 通过导出数据或者表文件的拷贝来保护数据、数据库复制-MySQL内部复制功能建立在两个或两个以上服务器之间,通过设定它们之间的主从关系来实现的。

3. MySQL的主从复制:在主库中开启Binlog功能,这样主库就可以把Binlog传递给从库,从库拿到Binlog后实现数据恢复从而达到主从数据一致性。

二、Binlog文件记录模式

Binlog文件名默认为“主机名_binlog-序列号”格式。也可以在配置文件中指定名称。
文件记录模式有STATEMENT, ROW和MIXED三种,具体含义如下:STATEMENT(Statement-based-replication,SBR):基于语句的复制。每一天被修改数据的SQL都会
记录到master的Binlog中,slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL再次执行。
优点:日志量少,减少磁盘IO,提升存储和恢复速度。
缺点:在某些情况下会导致主从数据不一致,比如last_insert_id(), now()等函数。ROW(row-based replication, RBR): 日志中会记录每一行数据被修改的情况,然后在slave端对相同的
数据进行修改。
优点:能清楚记录每一个行数据的修改细节,能完全实现主从数据同步和数据的恢复。
缺点:批量操作,会产生大量的日志,尤其是alter table会让日志暴涨。MIXED(mixed-based replication, MBR): 以上两种模式的混合使用,一般会使用STATEMENT模式保存Binlog,
对于STATEMENT模式无法复制的操作使用ROW模式保存Binlog,MySQL会根据执行的SQL语句选择写入模式。

三、Binlog 日志内容

binlog日志记录了所有的DDL和DML语句,一般来说开启binlog日志大概会有1%的性能损耗。
binlog日志包括两类文件
1)二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件
2)二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。

文件结构:

使用前提:

开启binlog日志->操作之前对数据进行备份->flush logs,将缓存存磁盘

四、常用的binlog日志操作命令

1)查看所有binlog日志列表
mysql> show master logs;
2)查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值
mysql> show master status;
3)flush刷新log日志,自此刻开始产生一个新编号的binlog日志文件
mysql> flush logs;
4) 查看所有的binlog:
mysql> show binary logs;
5)show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] [row_count];
解释:
IN 'log_name' :指定要查询的binlog文件名(不指定就是第一个binlog文件)
FROM pos :指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
LIMIT [offset,] :偏移量(不指定就是0)
row_count :查询总条数(不指定就是所有行)
6)mysqlbinlog 两对非常重要的参数
--start-datetime --stop-datetime 解析某一个时间段内的 binlog;
--start-position --stop-position 解析在两个 position 之间的 binlog;
7)利用binlog日志恢复mysql数据

五、binlog日志中间件

数据最终一致性: 在数据库操作成功后,需要进行一些其他操作,如:发送一条消息到MQ中、更新缓存或者更新搜索引擎中的索引等

如何保证数据库操作与这些行为的一致性,就成为一个难题。以数据库与redis缓存的一致性为例:操作数据库成功了,可能会更新redis失败;反之亦然。很难保证二者的完全一致。

思路: 不要同时去更新数据库和其他组件,只是简单的更新数据库即可。

如果数据库操作成功,必然会产生binlog。之后,我们通过一个组件,来模拟的mysql的slave,拉取并解析binlog中的信息。通过解析binlog的信息,去异步的更新缓存、索引或者发送MQ消息,保证数据库与其他组件中数据的最终一致。

将模拟slave的组件,统一称之为binlog同步组件。目前有很多开源的实现,例如linkedin的databus,阿里巴巴的canal,美团点评的puma等。

当我们通过binlog同步组件完成数据一致性时,示意图如下:

扩展:

Databus: 低延迟、可靠的、支持事务的、保持一致性的数据变更抓取系统。由LinkedIn于2013年开源。Databus通过挖掘数据库日志的方式,将数据库变更实时、可靠的从数据库拉取出来,业务可以通过定制化client实时获取变更并进行其他业务逻辑。

canal是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

二者对比:

MySQL Binlog温故知新相关推荐

  1. Mysql binlog日志及binlog恢复数据库操作

    初识MySQL 日志binlog MySQL重要log,二进制日志文件,记录所有DDL和DML语句(除select),事件形式记录,包含语句所执行的消耗时间,事务安全型. DDL(数据库定义语言),主 ...

  2. MySQL Binlog解析

    概述 MySQL的安装可以参考:Linux(CentOS)中常用软件安装,使用及异常--MySQL, VmTools MySQL关于Binlog的官方文档:The Binary Log 基于Binlo ...

  3. Mysql binlog应用场景与原理深度剖析

    1 基于binlog的主从复制 Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制.复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他M ...

  4. mysql binlog的查询

    查mysql bin-log binlog基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中: 作用:MySQL的作用类似于Oracle的归 ...

  5. php读取binlog,PHP解析Mysql Binlog

    PHP解析Mysql Binlog,依赖于mysql-replication-listener库 详见:[https://github.com/bullsoft/php-binlog](https:/ ...

  6. mysql binlog 多少,MySQL binlog后面的编号最大是多大?

    在上课中讲到MySQL的binlog是mysql-bin.000001,有细心的学习提到,是不是这个达到mysql-bin.999999后数据库的binlog就要重新开始了? 对于这个问题一时间也被问 ...

  7. MySQL bin-log 日志清理方式

    MySQL bin-log 作用 1.数据恢复:如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失. 2.主从服务器之间同步数据:主服务 ...

  8. mysql基于binlog增量更新_一个应用它提取MySQL binlog,解析binlog并将增量更新数据推送到不同的接收器...

    DolphinBeat Other languages: 中文 This is a high available server that pulls MySQL binlog, parses binl ...

  9. Mysql Binlog三种格式详细介绍

    binlog 的不同模式有什么区别呢? 1.Statement:每一条会修改数据的sql都会记录在binlog中. 优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能.(相比 ...

最新文章

  1. 百度云使用第三方工具下载文件
  2. Java快速生成20亿数字_关于内存:Java-打印10亿到20亿
  3. 拦截器Intercepter和过滤器Filter的比较
  4. [MS bug]安装SQL Server 2008 错误:is not a valid login or you do not have permission
  5. Bear in the Field(CF-385E)
  6. Android ProGuard 还原堆栈
  7. mysql查询字段为null的方法
  8. Sobel边缘检测 - 梯度算子介绍
  9. 磁珠法RNA pull down试剂盒、蛋白质-核酸相互作用
  10. Python爬虫实战,requests模块,Python实现IMDB电影top数据可视化
  11. php中的eof是什么意思,在C++中eof是什么意思?
  12. html常用长度度量单位,度量长度的单位是什么 毫米以下的五个计量单位分别是什么?...
  13. TaoFramework
  14. 财物机器人英文ppt演讲课件_英语演讲练习PPT-机器人发展史(机械工程)ppt
  15. 【附源码】计算机毕业设计java英语四六级在线学习系统设计与实现
  16. XVI Open Cup named after E.V. Pankratiev. GP of Siberia
  17. python初中数学建模培训_初中生数学建模培养
  18. 【测试技术】信号处理基础
  19. 【考研高数 武忠祥+880版 自用】高数第四章基础阶段思维导图
  20. 基于Cesium的无人机飞行模拟

热门文章

  1. CodeM2018美团 初赛A轮 题目二 下棋
  2. 记一次生产环境java服务mqtt连接线程数过多的处理过程
  3. 【19调剂】北京航空航天大学苏州创新研究院培养基地非全日制硕士研究生招生说明(校内)...
  4. 网站设计|10大创意教你设计网站主页
  5. HCIA(华为体系初级网络安全工程师)eNSP(基础实验二RIP实验)
  6. WslRegisterDistribution failed with error: 0x80070050
  7. uniapp开发微信小程序,出现[微信小程序开发者工具] [error] Error: Fail to open IDE 错误的原因--潘万丁
  8. 局域网聊天工具都有哪些?
  9. Python 练习题 身体素质指数
  10. 【青松资讯】2018年金融行业网络威胁报告