我的编程空间,编程开发者的网络收藏夹
学习永远不晚

有哪些MySQL源码系列问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

有哪些MySQL源码系列问题

本篇内容介绍了“有哪些MySQL源码系列问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、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,直接交予存储引擎操作数据。因此也不会出现我们一开始说的,主键冲突的问题。

二、trx 实际的生成顺序 

我们说 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源码系列问题”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

有哪些MySQL源码系列问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ubuntu apt源的常见问题有哪些

1. 无法连接到apt源:可能是网络问题,检查网络连接是否正常,或者apt源是否可用。2. apt源更新慢:可能是apt源服务器的问题,可以尝试更换其他的apt源服务器。3. 无法安装软件包:可能是apt源中没有该软件包或者版本不匹配,可以
2023-09-16

关于Java序列化的问题有哪些

本篇内容主要讲解“关于Java序列化的问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“关于Java序列化的问题有哪些”吧!问题一:什么是 Java 序列化?序列化是把对象改成可以存到磁盘
2023-06-02

RedisTemplate下Redis分布式锁引发的系列问题有哪些

这篇文章主要介绍了RedisTemplate下Redis分布式锁引发的系列问题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 首先,分布式集群的问题大家都知道,
2023-06-14

win10系统常见问题有哪些

系统崩溃或死机:这是最常见的问题之一,可能是由于软件冲突、硬件问题或系统错误引起的。2. 蓝屏错误:有时系统会出现蓝屏错误代码,这可能是由于硬件故障、驱动程序问题或系统错误引起的。3. 病毒感染:Win10系统也容易受到病毒和恶意软件的感染
2023-10-18

MySQL服务常见问题有哪些

1. 连接问题:无法连接到MySQL服务器,可能是因为网络问题、权限问题或者MySQL服务器未启动。2. 授权问题:无法使用特定的用户名和密码登录到MySQL服务器,可能是因为密码错误或者没有相应的权限。3. 数据库不存在:尝试连接到不存在
2023-09-27

常见的Python列表操作问题有哪些

这篇文章主要介绍“常见的Python列表操作问题有哪些”,在日常操作中,相信很多人在常见的Python列表操作问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”常见的Python列表操作问题有哪些”的疑
2023-06-16

Python列表中最常见的问题有哪些

这篇文章主要介绍“Python列表中最常见的问题有哪些”,在日常操作中,相信很多人在Python列表中最常见的问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python列表中最常见的问题有哪些”的疑
2023-06-02

编程热搜

目录