mysql binlog之一 binlog输出内容的说明

简介: mysql binlog之一 binlog输出内容的说明

基础材料:

centos7.5  mysql 5.7.24  开启GTID ROW格式

binlog对于mysql是至关重要的,binlog与undo redo一起保证了数据的完整性,用于数据恢复,崩溃恢复、任一时间点恢复、甚至是任意一条数据的恢复。所有的高可用模式也都是基于binlog进行处理的。

本文主要对row格式下binlog日志输出内容进行说明。

首先执行flush logs截断当前日志,生成新日志,便于查看。然后插入一条记录,使用mysqlbinlog命令查看binlog。

mysql> flush logs;

mysql> insert into testxxxx values (110,111,111);

[root@mysql1 ~]# mysqlbinlog --no-defaults -vv mysql-binlog.000003

# at 732
#190312 16:23:46 server id 98  end_log_pos 797 CRC32 0xba637854         GTID    last_committed=2        sequence_number=3    rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '92b47a33-db57-11e8-accf-000c2988a781:21'/*!*/;
# at 797
#190312 16:23:46 server id 98  end_log_pos 869 CRC32 0x82827bcc         Query   thread_id=48    exec_time=0 error_code=0
SET TIMESTAMP=1552379026/*!*/;
BEGIN
/*!*/;
# at 869
#190312 16:23:46 server id 98  end_log_pos 922 CRC32 0x28c80e4b         Table_map: `test`.`testxxxx` mapped to number 185
# at 922
#190312 16:23:46 server id 98  end_log_pos 970 CRC32 0x9d58cf96         Write_rows: table id 185 flags: STMT_END_F
BINLOG '
kmyHXBNiAAAANQAAAJoDAAAAALkAAAAAAAEABHRlc3QACHRlc3R4eHh4AAMDAwMABksOyCg=
kmyHXB5iAAAAMAAAAMoDAAAAALkAAAAAAAEAAgAD//huAAAAbwAAAG8AAACWz1id
'/*!*/;
### INSERT INTO `test`.`testxxxx`
### SET
###   @1=110 /* INT meta=0 nullable=0 is_null=0 */
###   @2=111 /* INT meta=0 nullable=1 is_null=0 */
###   @3=111 /* INT meta=0 nullable=1 is_null=0 */
# at 970
#190312 16:23:46 server id 98  end_log_pos 1001 CRC32 0xa52db5f9        Xid = 2932378
COMMIT/*!*/;
# at 1001

1、上图中有许多# at开头的行,用于标示每个事件在binlog中的偏移量,例如# at 732表示该事件在binlog的位置是732字节之后

     两个# at之间标示了mysql中的一个事件,而且在事件开始时也会通过end_log_pos标示事件结束的位置

     binlog中一个完整的事务对应多个事件,两个GTID last_committed=2 sequence_number=3这样的行之间标识了一个完整的事务。

2、 server id 98表示产生该事务服务器id号为98,这是在my.cnf文件中定义的,该id在集群内不能重复。一来是对事务产生的server做标识,二来是在类似双主模式下的集群环境里用于中断binlog循环复制重做的问题(log-slave-updates = 1)。

3、 CRC32用于校验binlog文件的完整性。

4、 GTID表示启动了GTID属性

5、 last_committed=2组提交标识、同一组提交的事务具备相同的last_committed值,可以在从库并行重放,以减少同步延迟。

6、 sequence_number=3,事务对应的顺序号,该值单调递增,同时也标识了同一组提交事务的顺序,在从库设置slave_preserve_commit_order=1时,依赖该值模拟主库的提交顺序,在从库提交。以达到数据落盘过程完全一致。

7、 SET @@SESSION.GTID_NEXT= '92b47a33-db57-11e8-accf-000c2988a781:21'/*!*/;标识该事务使用的GTID序列号,92b47a33-db57-11e8-accf-000c2988a781为该主机的标识。后面的数字21标识事务号,随事务的提交而依次递增。该GTID标识正常情况下与show master status或show slave status的输出部分一致。

8、 SET TIMESTAMP=1552379026/*!*/;标识了该事务产生的时间,在一些特殊情况下保证数据一致性。比如使用了now函数的sql,可能延迟了很长时间才传到备库,此时now函数取该值插入,保证了与主库执行时间的一致。

9、  begin开始执行事务

10、Table_map: `test`.`testxxxx` mapped to number 185,标识要操作哪个库的哪张表

11、Write_rows: table id 185 flags: STMT_END_F,标识该操作类型,本次是插入操作对应Write_rows事件

12、

### INSERT INTO `test`.`testxxxx`
          ### SET
          ###   @1=110 /* INT meta=0 nullable=0 is_null=0 */
          ###   @2=111 /* INT         meta=0 nullable=1 is_null=0 */
         ###   @3=111 /* INT meta=0 nullable=1 is_null=0 */

      这部分是具体的插入语句,@1=110表示在该表的第一个列插入值110,依次类推。如果此处是一个误删除操作,只要把前面的delete改为insert,再前滚这段binlog即可找回数据。由于语句执行时还有上下文关系,所以在不确定影响的情况下,不要只把SQL拿出来执行,而是前滚整个事务。

13、Xid = 2932378是保证数据完整性的一个标识,每个DML事务提交并完全写入binlog中结尾处一定会有Xid(DDL是没有的)。在redolog中也会记录该Xid值。在2PC提交机制中用此标识在redolog和binlog进行对比,崩溃时如果redolog没有commit,在redolog和binlog都有该值时,则事务重做,如果binlog没有找到该值时,则事务回滚。如果redolog也没有该值时,无需查找binlog,事务直接回滚。

14、最后由COMMIT标识提交事务



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
11月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
354 6
|
12月前
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
613 9
|
存储 SQL 关系型数据库
MySQL的Redo Log与Binlog机制对照分析
通过合理的配置和细致的管理,这两种日志机制相互配合,能够有效地提升MySQL数据库的可靠性和稳定性。
396 10
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
983 23
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
300 4
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
2069 0
|
11月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
628 158
|
11月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
11月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1669 152

热门文章

最新文章

推荐镜像

更多