真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

有哪些MySQL源碼系列問題-創(chuàng)新互聯(lián)

本篇內(nèi)容介紹了“有哪些MySQL源碼系列問題”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),山南企業(yè)網(wǎng)站建設(shè),山南品牌網(wǎng)站建設(shè),網(wǎng)站定制,山南網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,山南網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

一、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 進(jìn)行回放的時候,他走的就不是server層的創(chuàng)建連接,執(zhí)行語句了。而是直接調(diào)用每個event中的do_apply_event。比如table map event,它會將表的元信息保存起來。

到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 回放時,實際是繞過了trigger,直接交予存儲引擎操作數(shù)據(jù)。因此也不會出現(xiàn)我們一開始說的,主鍵沖突的問題。

二、trx 實際的生成順序

我們說 trx是由event 構(gòu)成的。比如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 函數(shù)里生成的。這個涉及到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ù)中,會調(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(儲存語句), query_log_event(begin), xid event, gtid event

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

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

“有哪些MySQL源碼系列問題”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


新聞名稱:有哪些MySQL源碼系列問題-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/dcppej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部