热璞数据库HotDB 产品是基于Mysql 的分布式事务数据库,在上一part的分享中,我们讲到了MySQL源码系类中的2个问题:

1、trigger的event到底怎么回放的,为什么没有主键冲突?

上次分享时,介绍了trigger trx在binlog中events的顺序

gtid event

query event

table_map_event(table1)

table_map_event(table2)

rows_event(table1)

rows_event(table2)

xid_event

实际在slave 进行回放的时候,他走的就不是server层的创建连接,执行语句了。而是直接调用每个event中的do_apply_event。比如table map event,它会将表的元信息保存起来。

到write_rows_event呢,slave 调用函数如下

|--do_exec_row

|--write_row

|-- handler::ha_write_row

|-- write_row

可以看到是调用了引擎层的innodb::write_row 将数据插进去。

综上我们可以看到,trigger trx 在slave 回放时,实际是绕过了trigger,直接交予存储引擎操作数据。因此也不会出现我们一开始说的,主键冲突的问题。

2、trx 中 events 生成的时间点和顺序

我们说 trx是由event 构成的。比如insert 语句,它包含的events 是gtid_log_event, query_log_event,

table_map_log_event, write_rows_log_event, xid_log_event

我们说这些events是在最后trx 提交的时候生成的,实际不是哈,他们的实际生成顺序如下:

Gtid event, Xid event 是在ordered_commit 函数里生成的。这个涉及到binlog 和redo log的一致性写入问题。

table map event 在 binlog_write_table_map 函数中生成,它接收了参数 has trans 标志是否是事务,need_binlog_rows_query 是否要生成rows_query_log_event

在函数binlog_write_table_nap 函数中,会调用 binlog_start_trans_and_stmt, 在该函数中生成query_log_event

最后调用 write event 将所生成的event 缓存在thd 的binlog_chache 中。

生成顺序: table_map_log_event, query_log_event, [rows_query_log_event]

缓存顺序: query_log_event, [rows_query_log_event], table_map_log_event

接着生成xid event,最后在ordered_commit函数中生成gtid event,

statement 格式:

没有table_map_event 和row_event 生成顺序

生成顺序:query_log_event(储存语句), query_log_event(begin), xid event, gtid event

binlog_write_table_map 中生成table_map_event, 使用table_map_log_event的另一个构造函数,从table对象中获取表信息,构造table_map_log_event。

接着调用 binlog_start_trans_and_stmt 生成query_log_event(query_log 中设计的regular trx 和 xa cases) 接着调用cache_data的write_event 将event 写入。

关于MySQL数据库或者分布式事务数据库的相关问题,欢迎大家跟HotDB一起分享

mysql输入错误怎样更正_HotDB MySQL 篇| MySQL 源码系列的补充与更正相关推荐

  1. java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

    jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...

  2. java mysql SSM实现的校园门户平台网站系统源码+含开题报告与需求分析+包安装配置

    下载地址:https://download.csdn.net/download/ouyangxiaobai123/22174377 项目介绍: java mysql SSM实现的校园门户平台网站系统源 ...

  3. 【java毕业设计】基于Spring Boot+mysql的酒店管理系统设计与实现(程序源码+毕业论文)-酒店管理系统

    基于Spring Boot+mysql的酒店管理系统设计与实现(程序源码+毕业论文) 大家好,今天给大家介绍基于Spring Boot+mysql的酒店管理系统设计与实现,本论文只截取部分文章重点,文 ...

  4. Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码

    Java利用反射封装DBUtil,mysql万能增删改查工具类,附源码 等有时间再慢慢写代码注释吧,先把源码放出来.文章最后有整个项目的压缩包. ps:拓展 Java 原生MySQL JDBC 插入后 ...

  5. java计算机毕业设计Vue和mysql智能图书管理系统MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计Vue和mysql智能图书管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计Vue和mysql智能图书管理系统MyBatis+系统+LW文档+源码+调 ...

  6. Nginx基础篇-Nginx 源码编译安装与平滑升级

    Nginx基础篇-Nginx 源码编译安装与平滑升级 Nginx官网下载地址 http://nginx.org/ 1.安装依赖包 yum -y install pcre-devel zlib-deve ...

  7. Nginx实战基础篇一 源码包编译安装部署web服务器

    Nginx实战基础篇一 源码包编译安装部署web服务器 版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 您可以自由复制.发行.展览.表演.放映.广播或通 ...

  8. 源码系列第1弹 | 带你快速攻略Kafka源码之旅入门篇

    大家过年好,我是 华仔, 又跟大家见面了. 从今天开始我将为大家奉上 Kafka 源码剖析系列文章,正式开启 「Kafka的源码之旅」,跟我一起来掌握 Kafka 源码核心架构设计思想吧. 今天这篇我 ...

  9. 安装mysql需要配置什么软件_软件配置篇-MySQL下载及安装

    1.进入MySQL官网下载 选择合适的版本下载. 2.安装MySQL 解压后文件夹一般名为:mysql-x.x.xx-winx64 在该文件夹下新建一个my.ini文件,并添加如下内容. [mysql ...

最新文章

  1. Redis面试突击专用
  2. python pyppeteer自定义chromium目录
  3. 章磊回答: 姚期智提出的百万富翁难题被破解? 多方安全计算MPC到底是个什么鬼?
  4. spring security加载原理(基于springboot)
  5. numpy基础(part4)--统计量
  6. python猫狗大战讲解_tensorflow实现猫狗大战(分类算法)
  7. c语言配电自动化,我是电气工程及其自动化专业的要学C语言吗?
  8. 【zookeeper】zookeeper 的监听机制
  9. 大数据之-Hadoop3.x_MapReduce_WordCount案例需求分析---大数据之hadoop3.x工作笔记0087
  10. PHP计划任务:如何使用Linux的Crontab执行PHP脚本(转载)
  11. 哲学家进餐问题解决方法
  12. 阅读Revisiting Superpixels for Active Learning in Semantic Segmentation With Realistic Annotation Cost
  13. python k线斜率计算_python求线性回归斜率
  14. 联想服务器如何u盘安装系统教程,u盘联想系统安装教程 联想如何启动u盘安装系统教程...
  15. quartus中与modelsim进行联合仿真出现错误error:(vopt-13130)failed to find design unit****
  16. Windows 11正式版来了!一文带你免费升级、镜像下载、最低系统要求
  17. 房屋租赁合同中“天价违约金”的约定是否有效?
  18. iPhone/iPad怎么进入恢复模式?
  19. bzoj4238: 电压
  20. Windows10解决耳机被识别为扬声器问题

热门文章

  1. matlab 内存读取数据,matlab
  2. armbian安装图形桌面_Linux图形界面的搜索工具,比Windows强吗?
  3. Python自动化运维——文件内容差异对比
  4. Django框架(9.Django中的配置使用MySQL数据库以及页面重定向)
  5. VTK:多边形曲面等高线插值用法实战
  6. boost::mpl::greater_equal相关的测试程序
  7. boost::mpl模块实现eval_if相关的测试程序
  8. boost::math::barycentric_rational用法的测试程序
  9. boost::lexical_cast用法的测试程序
  10. boost::hana::any_of用法的测试程序