日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2024/9/27 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql输入错误怎样更正_HotDB MySQL 篇| MySQL 源码系列的补充与更正 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

熱璞數(shù)據(jù)庫(kù)HotDB 產(chǎn)品是基于Mysql 的分布式事務(wù)數(shù)據(jù)庫(kù),在上一part的分享中,我們講到了MySQL源碼系類中的2個(gè)問題:

1、trigger的event到底怎么回放的,為什么沒有主鍵沖突?

上次分享時(shí),介紹了trigger trx在binlog中events的順序

gtid event

query event

table_map_event(table1)

table_map_event(table2)

rows_event(table1)

rows_event(table2)

xid_event

實(shí)際在slave 進(jìn)行回放的時(shí)候,他走的就不是server層的創(chuàng)建連接,執(zhí)行語(yǔ)句了。而是直接調(diào)用每個(gè)event中的do_apply_event。比如table map event,它會(huì)將表的元信息保存起來。

到write_rows_event呢,slave 調(diào)用函數(shù)如下

|--do_exec_row

|--write_row

|-- handler::ha_write_row

|-- write_row

可以看到是調(diào)用了引擎層的innodb::write_row 將數(shù)據(jù)插進(jìn)去。

綜上我們可以看到,trigger trx 在slave 回放時(shí),實(shí)際是繞過了trigger,直接交予存儲(chǔ)引擎操作數(shù)據(jù)。因此也不會(huì)出現(xiàn)我們一開始說的,主鍵沖突的問題。

2、trx 中 events 生成的時(shí)間點(diǎn)和順序

我們說 trx是由event 構(gòu)成的。比如insert 語(yǔ)句,它包含的events 是gtid_log_event, query_log_event,

table_map_log_event, write_rows_log_event, xid_log_event

我們說這些events是在最后trx 提交的時(shí)候生成的,實(shí)際不是哈,他們的實(shí)際生成順序如下:

Gtid event, Xid event 是在ordered_commit 函數(shù)里生成的。這個(gè)涉及到binlog 和redo log的一致性寫入問題。

table map event 在 binlog_write_table_map 函數(shù)中生成,它接收了參數(shù) has trans 標(biāo)志是否是事務(wù),need_binlog_rows_query 是否要生成rows_query_log_event

在函數(shù)binlog_write_table_nap 函數(shù)中,會(huì)調(diào)用 binlog_start_trans_and_stmt, 在該函數(shù)中生成query_log_event

最后調(diào)用 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函數(shù)中生成gtid event,

statement 格式:

沒有table_map_event 和row_event 生成順序

生成順序:query_log_event(儲(chǔ)存語(yǔ)句), query_log_event(begin), xid event, gtid event

binlog_write_table_map 中生成table_map_event, 使用table_map_log_event的另一個(gè)構(gòu)造函數(shù),從table對(duì)象中獲取表信息,構(gòu)造table_map_log_event。

接著調(diào)用 binlog_start_trans_and_stmt 生成query_log_event(query_log 中設(shè)計(jì)的regular trx 和 xa cases) 接著調(diào)用cache_data的write_event 將event 寫入。

關(guān)于MySQL數(shù)據(jù)庫(kù)或者分布式事務(wù)數(shù)據(jù)庫(kù)的相關(guān)問題,歡迎大家跟HotDB一起分享

總結(jié)

以上是生活随笔為你收集整理的mysql输入错误怎样更正_HotDB MySQL 篇| MySQL 源码系列的补充与更正的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。