MySQL binlog存储格式笔记
前言
完全参考:《24 | MySQL是怎么保证主备一致的?》
binlog 存储格式笔记
statement
binlog 里面记录的就是 SQL 语句的原文;
mysql> show binlog events in 'master.000001';
- 第一行 SET @@SESSION.GTID_NEXT='ANONYMOUS’你可以先忽略;
- 第二行是一个 BEGIN,跟第四行的 commit 对应,表示中间是一个事务;
- 第三行就是真实执行的语句了。可以看到,在真实执行的 delete 命令之前,还有一个“use ‘test’”命令。这条命令不是我们主动执行的,而是 MySQL 根据当前要操作的表所在的数据库,自行添加的。这样做可以保证日志传到备库去执行的时候,不论当前的工作线程在哪个库里,都能够正确地更新到 test 库的表 t。use 'test’命令之后的 delete 语句,就是我们输入的 SQL 原文了。可以看到,binlog“忠实”地记录了 SQL 命令,甚至连注释也一并记录了。
- 最后一行是一个 COMMIT。你可以看到里面写着 xid=61。xid就用redo关联binlog用的。
记录SQL语句的缺点:在备库上执行,可能因为和主库走的索引不同,而导致数据不一致;
row
binlog
的内容:
可以看到,与 statement
格式的 binlog
相比,前后的 BEGIN
和 COMMIT
是一样的。但是,row
格式的 binlog
里没有了 SQL 语句的原文,而是替换成了两个 event
:Table_map
和 Delete_rows
。
- Table_map event,用于说明接下来要操作的表是 test 库的表 t;
- Delete_rows event,用于定义删除的行为。
其实,我们通过上图 是看不到详细信息的,还需要借助 mysqlbinlog 工具,用下面这个命令解析和查看 binlog 中的内容。因为图 5 中的信息显示,这个事务的 binlog 是从 8900 这个位置开始的,所以可以用 start-position 参数来指定从这个位置的日志开始解析。
mysqlbinlog -vv data/master.000001 --start-position=8900;
- server id 1,表示这个事务是在 server_id=1 的这个库上执行的。
- 每个 event 都有 CRC32 的值,这是因为我把参数 binlog_checksum 设置成了 CRC32。
- Table_map event 跟在图 5 中看到的相同,显示了接下来要打开的表,map 到数字 226。现在我们这条 SQL 语句只操作了一张表,如果要操作多张表呢?每个表都有一个对应的 Table_map event、都会 map 到一个单独的数字,用于区分对不同表的操作。
- 我们在 mysqlbinlog 的命令中,使用了 -vv 参数是为了把内容都解析出来,所以从结果里面可以看到各个字段的值(比如,@1=4、 @2=4 这些值)。
- binlog_row_image 的默认配置是 FULL,因此 Delete_event 里面,包含了删掉的行的所有字段的值。如果把 binlog_row_image 设置为 MINIMAL,则只会记录必要的信息,在这个例子里,就是只会记录 id=4 这个信息。
- 最后的 Xid event,用于表示事务被正确地提交了。
你可以看到,当 binlog_format 使用 row 格式的时候,binlog 里面记录了真实删除行的主键 id,这样 binlog 传到备库去的时候,就肯定会删除 id=4 的行,不会有主备删除不同行的问题。
总结
statement模式下,会导致主备数据执行不一致,而row模式下,因为记录的是真实行的主键,所以可以保证主备数据一致。
MySQL binlog存储格式笔记相关推荐
- mysql binlog c++_MySQL binlog的格式解析
我搜集到了一些资料,对理解代码比较有帮助. 在头文件中binlog_event.h中,有描述 class Log_event_header class Log_event_footer 参见[Myst ...
- mysql binlog协议_mysql binlog协议分析--具体event
这几天在修改canal, 连接mysql和maria接收到的event有所区别 拿一个简单的insert sql来举例 mysql 会有以下几个event写入到binlog里 1.ANONYMOUS_ ...
- MySQL尚硅谷笔记
MySQL 网课链接 https://www.bilibili.com/video/BV1KW411u7vy?p=1 相关笔记链接 https://github.com/RingoTangs/Lear ...
- 最新、最全、最详细的 MySQL 数据库学习笔记总结(2021最新版)
数据库是什么 数据库管理系统,简称为DBMS(Database Management System),是用来存储数据的管理系统. DBMS 的重要性 无法多人共享数据 无法提供操作大量数据所需的格式 ...
- MySQL高级学习笔记(四)
文章目录 MySQL高级学习笔记(四) 1. MySql中常用工具 1.1 mysql 1.1.1 连接选项 1.1.2 执行选项 1.2 mysqladmin 1.3 mysqlbinlog 1.4 ...
- linux数据库创建score表,MySQL数据库学习笔记
MySQL数据库学习笔记phpma (实验环境:Redhat9.0,MySQL3.23.54) 纲要: 一,连接MySQL phpma 二,MySQL管理与授权 三,数据库简单操作 四, 数据库备份 ...
- Mysql binlog日志及binlog恢复数据库操作
初识MySQL 日志binlog MySQL重要log,二进制日志文件,记录所有DDL和DML语句(除select),事件形式记录,包含语句所执行的消耗时间,事务安全型. DDL(数据库定义语言),主 ...
- MySQL Binlog解析
概述 MySQL的安装可以参考:Linux(CentOS)中常用软件安装,使用及异常--MySQL, VmTools MySQL关于Binlog的官方文档:The Binary Log 基于Binlo ...
- Mysql binlog应用场景与原理深度剖析
1 基于binlog的主从复制 Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制.复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他M ...
最新文章
- IOS开发笔记3-C语言基础复习
- netty3超长字符串
- java 大臣的旅费_PREV-9-蓝桥杯-历届试题-大臣的旅费-java
- S3C6410 KeyPad驱动(下)
- 自定义类加载器在复杂类加载情况下的运行分析
- windows中 修改某种文件图标 的方法 (备忘)
- 第二次作业+105032014101
- 视觉SLAM笔记(13) 空间变换
- 菜鸟的IT道路ing (一)
- 导入工程出错原因及解决
- Java中String的用法
- chrome vue 未响应_分享几个宝藏级Vue管理后台框架 必须收藏
- 库卡六轴机器人编程手册_工业机器人(ABB、库卡、安川)编程专业教材!
- 【iOS源码】懒人笔记应用源码
- 计算机专业毕设java选题参考
- CSDN Markdown编辑器 图片对齐方式(居中/左对齐/右对齐)及图片大小
- 各行业赫芬达尔指数表(2013-2018年)
- SUBMAIL短信平台API接口-Message/send
- 1564 区间的价值
- 小米电视3 android,小米电视系列ROOT教程(含4A,4S,4X等Android6.0.1版机型)