MYSQL-- binlog事件详解
mysqlbinlog -vvv log.000001
# at
# :: server id end_log_pos CRC32 0x7439a004 GTID last_committed= sequence_number=
SET @@SESSION.GTID_NEXT= '191f7a9f-ffa2-11e5-a825-00163e00242a:1'/*!*/;
# at
# :: server id end_log_pos CRC32 0x0839a8df Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
SET @@session.pseudo_thread_id=/*!*/;
SET @@session.foreign_key_checks=, @@session.sql_auto_is_null=, @@session.unique_checks=, @@session.autocommit=/*!*/;
SET @@session.sql_mode=/*!*/;
SET @@session.auto_increment_increment=, @@session.auto_increment_offset=/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=,@@session.collation_connection=,@@session.collation_server=/*!*/;
SET @@session.lc_time_names=/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos CRC32 0x738c7c74 Table_map: `test`.`tt` mapped to number
# at
# :: server id end_log_pos CRC32 0x1949e971 Write_rows: table id flags: STMT_END_F BINLOG '
mcM6VxNkAAAALQAAAFABAAAAAHEAAAAAAAEABHRlc3QAAnR0AAEDAAF0fIxz
mcM6Vx5kAAAAKAAAAHgBAAAAAHEAAAAAAAEAAgAB//4KAAAAcelJGQ==
'/*!*/;
### INSERT INTO `test`.`tt`
### SET
### @= /* INT meta=0 nullable=1 is_null=0 */
# at
# :: server id end_log_pos CRC32 0x63b03fee Xid =
COMMIT/*!*/;
| log. | | Gtid | | | SET @@SESSION.GTID_NEXT= '191f7a9f-ffa2-11e5-a825-00163e00242a:1' |
| log. | | Query | | | BEGIN |
| log. | | Table_map | | | table_id: (test.tt) |
| log. | | Write_rows | | | table_id: flags: STMT_END_F |
| log. | | Xid | | | COMMIT /* xid=1
mysqlbinlog --base64-output=decode-rows -vvv log.000001 # at
# :: server id end_log_pos CRC32 0x7439a004 GTID last_committed= sequence_number=
SET @@SESSION.GTID_NEXT= '191f7a9f-ffa2-11e5-a825-00163e00242a:1'/*!*/;
# at
# :: server id end_log_pos CRC32 0x0839a8df Query thread_id= exec_time= error_code=
SET TIMESTAMP=/*!*/;
SET @@session.pseudo_thread_id=/*!*/;
SET @@session.foreign_key_checks=, @@session.sql_auto_is_null=, @@session.unique_checks=, @@session.autocommit=/*!*/;
SET @@session.sql_mode=/*!*/;
SET @@session.auto_increment_increment=, @@session.auto_increment_offset=/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=,@@session.collation_connection=,@@session.collation_server=/*!*/;
SET @@session.lc_time_names=/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at
# :: server id end_log_pos CRC32 0x738c7c74 Table_map: `test`.`tt` mapped to number
# at
# :: server id end_log_pos CRC32 0x1949e971 Write_rows: table id flags: STMT_END_F
### INSERT INTO `test`.`tt`
### SET
### @= /* INT meta=0 nullable=1 is_null=0 */
# at
# :: server id end_log_pos CRC32 0x63b03fee Xid =
COMMIT/*!*/;
binlog事件:由<公有事件头>+[私有事件头]+[事件体]三部分组成
所有的binlog事件都包含公有事件头,另外两个部分是根据事件类型可选
公有事件头:
http://dev.mysql.com/doc/internals/en/event-structure.html v4 event structure: +=====================================+
| event | timestamp : |
| header +----------------------------+
| | type_code : |
| +----------------------------+
| | server_id : |
| +----------------------------+
| | event_length : |
| +----------------------------+
| | next_position : |
| +----------------------------+
| | flags : |
| +----------------------------+
| | extra_headers : x- |
+=====================================+
| event | fixed part x : y |
| data +----------------------------+
| | variable part |
+=====================================+
header length = x bytes data length = (event_length - x) bytes timestamp:包含了该项事件的开始的时间
event type:指是该事件的类型
serer_id :产生该事件的服务器的server-id
event_length :(包括了 公有事件头,私有事件头,事件体三部分的长度) ------------------------------------------------------------------------- binlog事件类型: FORMAT_DESCRIPTION_EVENT
MYSQL根据其定义的来解析其他事件 QUERY_EVENT:
事物开始 BEGIN事件
binlog_format='STATEMENT' ,具体执行的语句保存在QUERY_EVENT事件中
对于ROW 格式的BINLOG,所有DDL以文本格式的记录在QUERY_EVENT中 ROW_EVENT 分三类:(binlog_format='ROW')
1.WRITE_ROWS_EVENT ->insert
包含了要插入的数据
2.UPDATE_ROWS_EVENT ->update
包含了行修改前的值,也包含了修改后的值
3.DELETE_ROWS_EVENT ->delete
包含了需要删除行的主键值/行号 TABLE_MAP_EVENT
每个ROWS_EVENT事件之前有一个TABLE_MAP_EVENT用于描述内部ID和结构定义 XID_EVENT:
MYSQL进行崩溃恢复时间,根据事务在binlog中的提交情况来决定是否提交存储引擎中状态为prepared的事物 BINLOG_CHECKPOINT_EVENT
mysql执行崩溃恢的过程中,会根据读取的BINLOG_CHECKPOINT_EVENT来决定那些binlog文件是可以不用扫描的
ROTATE_EVENT
当BINLOG 文件大小达到max_binlog_size参数设置值时或者flush logs命令时,binlog发生切换,在文件尾添加ROTATE_EVENT事件 STOP_EVENT
MYSQL停止时,在文件尾加入STOP_EVENT
MYSQL-- binlog事件详解的更多相关文章
- mysql binlog配置详解
关闭binlog,注释掉mysql配置文件中的log-bin=mysql-bin即可 baidu zone - 关闭binlog方法 cnblogs - linux下mysql配置文件my ...
- Mysql Binlog日志详解
一.Mysql Binlog格式介绍 Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记录在 ...
- MySQL日志功能详解
MySQL日志功能详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询日志 它是用来保存所有跟查询相关的日志,这种日志类型默认是关闭状态的,因为MySQL的用户有很多,如果 ...
- MySQL数据库备份详解
原文:MySQL数据库备份详解 对于任何数据库来说,备份都是非常重要的 数据库复制不能取代备份的作用 比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据 ...
- Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- MySQL数据库优化详解(收藏)
MySQL数据库优化详解 mysql表复制 复制表结构+复制表数据mysql> create table t3 like t1;mysql> insert into t3 select * ...
- (转)MySQL备份原理详解
MySQL备份原理详解 原文:http://www.cnblogs.com/cchust/p/5452557.html 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之 ...
- Mysql 三大特性详解
Mysql 三大特性详解 Mysql Innodb后台线程 工作方式 首先Mysql进程模型是单进程多线程的.所以我们通过ps查找mysqld进程是只有一个. 体系架构 InnoDB存储引擎的架构如下 ...
- JavaScript事件详解-jQuery的事件实现(三)
正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...
- JavaScript事件详解-Zepto的事件实现(二)【新增fastclick阅读笔记】
正文 作者打字速度实在不咋地,源码部分就用图片代替了,都是截图,本文讲解的Zepto版本是1.2.0,在该版本中的event模块与1.1.6基本一致.此文的fastclick理解上在看过博客园各个大神 ...
随机推荐
- IOS 点击按钮 光环 冲击波效果
UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(0, 0) radius:ROUND_WIDTH/2 - ...
- [Web API] 如何让 Web API 统一回传格式以及例外处理
[Web API] 如何让 Web API 统一回传格式以及例外处理 前言 当我们在开发 Web API 时,一般的情况下每个 API 回传的数据型态或格式都不尽相同,如果你的项目从头到尾都是由你一个 ...
- 关于SecureCRT的安装和破解问题以及xp系统的串口问题
今天下午找了几个小时的软件,因为交叉编译环境要搭好,其中SecureCRT还有串口问题要解决,我突然间发现我开始光盘中的SecureCRT坏掉了,在网站上下载SecureCRT,结果要很多的积分,这样 ...
- 开通GitHub以及使用笔记
把小游戏的代码和博客迁移到GitHub上,路径是:https://github.com/GAMTEQ,欢迎访问 以下是使用GITHUB的一些命令 504 cd code 506 mkdir Fai ...
- 利用原生JavaScript获取样式的方式小结
来源:http://www.ido321.com/930.html ps:是获取样式,不是设置样式.若没有给元素设置样式值,则返回浏览器给予的默认值.(论坛整理) 1.element.style:只能 ...
- linux 系统常用命令
临时性的完全关闭防火墙,可以不重启机器: #/etc/init.d/iptables status ##查看防火墙状态 #/etc/init.d/iptable stop ...
- CodeForces 682D Alyona and Strings (四维DP)
Alyona and Strings 题目链接: http://acm.hust.edu.cn/vjudge/contest/121333#problem/D Description After re ...
- java assert的用法简介
assert的基本用法 assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身.有的是通过库 ...
- HDU 5723 Abandoned country (最小生成树+dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5723 n个村庄m条双向路,从中要选一些路重建使得村庄直接或间接相连且花费最少,这个问题就是很明显的求最 ...
- Hibernate HQL和原生SQL查询的一点区别
1.createSQLQuery 1.1默认查询的结果为BigDecimal 1.2通过addScalar("CGD_ID", StandardBasicTypes.LONG)可以 ...