暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
MySQL源码系列问题回顾
770
2页
6次
2020-08-07
免费下载
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 写入。
of 2
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论