hexeditor 復制二進制值_MySQL復制全解析 Part 6 MySQL GTID 生命周期

實驗環境

此次實驗的環境如下

  • MySQL 5.7.25
  • Redhat 6.10
  • 操作系統賬號:mysql
  • 數據庫復制賬號:repl
  • 復制格式:基于行的復制

180e8e0b29f0ba7c6d57e28a2ee30f48.png

通過前面的介紹我們知道MySQL的復制有兩種方法

  • 基于二進制日志文件位置
  • 基于GTID

上一節的內容為GTID的格式和存儲,這節根據官方文檔我們說GTID的生命周期

1. GTID生命周期

這里以一個事務從主庫執行到從庫應用的過程來講解

1.1 主庫提交事務被分配GTID

當主庫執行和提交一個事務后,該事務會被分配一個GTID(主庫uuid和最小的未被使用過的事務號),之后會被寫入到二進制日志文件中,其位置在具體事務之前

如果一個事務沒有被寫入二進制文件,例如被過濾掉或者是只讀的,則不會被分配GTID

1.2 主庫GTID寫入二進制文件

分配GTID后,該GTID會在提交的時候以Gtid_log_event 事件的形式寫入二進制日志文件中,其位置在具體事務之前

當日志發生切換或者數據庫關閉時該GTID會被寫入到mysql.gtid_executed表中

我們可以通過mysqlbinlog命令看出

1ba8016932627c2e75d5916f3817a337.png

1.3 主庫寫入到GLOBAL.gtid_executed系統變量中

在提交時,還會將該GTID加入到GLOBAL.gtid_executed系統變量中

該變量是個GTID集合,代表目前為止所有被執行過的事務,主要用于復制中

我們也可以同如下命令查看

show master status;

92a31f97680b8e8d2eb5c3e4bad727bb.png

1.4 從庫接收主庫GTID事務

當二進制日志被傳輸到備庫后,會被儲存在relay 日志中,從庫會讀取該GTID并設置
gtid_next變量為該GTID

這樣就告訴備庫下一個執行的事務必須為該GTID

需要注意的是該變量是session級別的

1.5 從庫應用主庫GTID事務

在接收到主庫GTID事務并設置好gtid_next后,如果沒有其他進程在執行的話,從庫執行該GTID事務

如果同時有多個進程執行該事務,則會選擇其中一個(如多線程復制)

我們可以查詢gtid_owned系統變量來確認

select @@GLOBAL.gtid_owned

353d0a79f287e18219728cae4cd1441b.png

由于該事務已經被主庫分配了GTID,所以從庫上的該事務不會被分配GTID,而是使用gtid_next變量的值

1.6 從庫寫入二進制文件日志

由于從庫重新執行了來自主庫的事務,所以他也會寫日志到從庫的二進制日志文件中

這里分兩種情況

  • 如果從庫啟用了二進制日志功能,則和1.2步驟一致
  • 如果從庫未啟用二進制日志功能,則會將gtid和對應的事務語句寫入到mysql.gtid_executed表中

需要注意的是如果未開啟二進制日志功能MySQL 5.7及之前只有DML操作是原子級別的,DDL并不是,意味著如果MySQL發生異常,數據可能會變得不一致

MySQL 8.0后所有操作都支持

1.7 從庫寫入到GLOBAL.gtid_executed系統變量中

同樣的在提交后,從庫也會將該GTID寫入到從庫的gtid_executed系統變量中

2. 多線程復制

如果啟用了多線程復制(slave_parallel_workers > 0),由于是并行執行的GTID事務,每個線程負責不同的GTID,這時gtid_executed變量的值可能會有GAP,系統會自動更新這些值

3. 什么動作會被分配GTID

所有的數據庫更改(DML或DDL)都會被分配GTID

數據庫的新增刪除修改也會被分配GTID

非事務型的修改也會被記錄下來,如果在寫入過程中發生異常,則會記錄一個incident事件

如下操作可能會讓一個事務分配多個GTID

  • 一個存儲過程包含多個事務
  • drop table語句一次包含多個表
  • CREATE TABLE … SELECT 語句,他會被分配一個create table GTID和一個insert GTID

7. 參考資料

本專題內容翻譯自官方文檔并結合自己的環境

16.1.3.2 GTID Life Cycle?dev.mysql.com

63c6132732ea94a453a8d7bc1d0dd707.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539267.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539267.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539267.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Thrift介紹與應用(三)—hbase的thrift接口

原文:http://blog.csdn.net/guxch/article/details/12163047 ----------------------------------------------------------------------------------- 一、概述 Hbase是目前比較火的列存儲數據庫,由于Hbase是用Java寫的,因此它原生地提供了…

Linux/Unix 新手和專家教程

你正在找一些高質量的Linux 和 UNIX 的教程嗎?如果是,這篇文章會告訴你到哪去找到這些教程。這里我們將給出超過30個相當的不錯的 Linux 和 UNIX 在線的教程。 需要大家注意的是,他們都是英文的,也許有一些也經被翻譯到了中文社區…

自動ip的計算機共享打印,局域網內自動獲取ip地址怎么設置打印機共享文件夾...

在局域網環境中,為了盡可能地節省辦公成本,很多用戶都會選擇在局域網中架設、部署共享打印機,以便在單位的任何角落處都能方便、自如地進行打印操作。下面是學習啦小編為大家整理的關于局域網內自動獲取ip地址怎么設置打印機共享文件夾,一起來看看吧!局域網內自動獲…

高級數據分析1代碼_用Python進行數據分析,讓你一看就會

本書詳細介紹利用Python進行操作、處理、清洗和規整數據等方面的具體細節和基本要點。雖然本書的標題是“數據分析”,重點卻是Python編程、庫,以及用于數據分析的工具。第1章 準備工作第2章 Python語法基礎,IPython和Jupyter Notebooks第3章 …

工期日歷天計算器_天津實地告訴你:房建項目是怎樣保節點,搶工期的?

工程概況天津實地薔薇花園住宅地塊項目共計由24棟單體住宅、2棟配建及地下人防車庫組成,其中12層小高層4棟、13層小高層1棟、19棟7層洋房。總建建筑面積為139348.62㎡,地上99348㎡,地下40000㎡,人防面積為14236㎡。工期目標項目施…

thrift介紹及應用(四)—hadoop的thrift接口

原文:http://blog.csdn.net/guxch/article/details/12163519 ----------------------------------------------------------------------------------- 一、概述 hadoop是目前使用比較多的分布式文件系統,由于hadoop是用Java寫的,對非Java程…

遲到的年度總結,我們應該收放自如

現在已經2018年3月了,這篇2017的年度總結顯得晚了一點,但意義非凡,讓我有了更多的反省和思考,我相信大家讀完一定會有收獲。好了,廢話不多說進入主題。別用學習來逃避成長這話說的簡直是屁話,不是學習才會成…

測試fps游戲反應速度軟件,FPS反應速度提速

靜謐無聲,生死一瞬,說的就是FPS游戲,沒有哪一個種類的游戲可以比擬我們FPS玩家對于反應速度的追求,更快更準哪怕提速只是1毫秒,無數高手之所以為高手就是因為他們可以打出我們看起來不可能完成的擊殺,特別是…

html5中單選框被選中把值傳給后臺_HTML5的表單設計

使用過Delphi的程序員,對Form這個詞應該比較熟悉。在Delphi中,Form被翻譯為“界面、窗口”,作用是:為用戶提供界面,供用戶輸入信息,向用戶展示處理結果。HTML5中也有Form,功能與Delphi中的Form差…

python科赫曲線繪制正方形_Python數據處理從零開始----第四章(可視化)(14)使用seaborn繪制熱圖...

目錄 Python數據處理從零開始----第四章(可視化)①③多變量繪圖 Python數據處理從零開始----第四章(可視化)(14)使用seaborn繪制熱圖 seaborn.heatmapHeat maps顯示數字表格數據,其中單元格根據…

Hive的系統架構

一、架構圖 二、各組件 用戶接口:包括 CLI(控制臺命令),JDBC/ODBC,WebUI。 CLI,即Shell命令行 JDBC/ODBC 是 Hive 的Java,與使用傳統數據庫JDBC的方式類似 WebGUI是通過瀏覽器訪問 Hive --…

8266獲取網絡時間

8266獲取網絡時間 今天第一次用阿里的博客寫點東西感受一下....sntp.sync("ntp1.aliyun.com",function()print("sync succeeded")end,function(index)print("failed : "..index)end)用的SNTP 然后打印時間 time rtctime.epoch2cal(rtctime.get(…

重慶高考計算機分數線,重慶高考歷年分數線

2019年一、普通文理類(一) 文史類本科第一批 545分本科第二批 458分高職專科批 180分(二) 理工類本科第一批 525分本科第二批 435分高職專科批 180分二、藝術類(一)本科批1.美術類 336分2.音樂類(1)音樂學 359分(2)音樂表演(聲樂、鋼琴、器樂) 275分3.編導類 430分4.影視類(1)表…

坐標不顯示_Simpack不顯示坐標軸方向的解決方法

經常有用戶咨詢Simpack軟件打開模型時,不能顯示坐標軸的x、y、z方向,這個問題對建模有很大的影響。本文是蘭州交通大學陳龍同學提供的解決方法,供大家參考。使用Simpack軟件建模時,會遇到這種情況:比如要創建標記點時&…

th:text為null報錯_為vue3.0的學習TS解讀高級類型

知識點摘要本節課主要關鍵詞為: 自動類型推斷 / 類型斷言 / 類型別名(type) / 映射類型(Pick/Record等...) / 條件類型(extends) / 類型推斷(infer)自動類型推斷(不用你標類型了,ts自己猜)大家現在寫ts的時候一定會在每個變量后面都加上類型吧? 但是?現在告訴大家有些情況下你…

Hive與Hadoop的調用關系

一、調用圖 二、步驟解析 1、提交sql 交給驅動 2、驅動編譯:解析相關的字段表信息 3、去metastore查詢相關的信息 返回字段表信息 4、編譯返回信息 發給驅動 5、驅動發送一個執行計劃 交給執行引擎 6、執行計劃 6.1、DDLs 對數據庫表的操作的 直接和metastore交互 …

shell發送郵件函數

#發送郵件函數function send_mail(){ #定義郵件發送列表 maillist( zhengwei.liuxxx xiaogang.yangxxx sundy.shexxx ) #根據不同的函數參數,發送不同的郵件 if [ "$1" "gateway" ];thenfor mail in ${maillist[*]};doecho "無法ping通網…

列主元消去法例題詳解_高斯列主元消元法解方程組的步驟

高斯列主元消元法求解線性方程組AXb的簡要步驟??????????????????????????????????????nnnnnnnnbbbxxxaaaaaaaaa?????????2121212222111211方法說明(以4階為例):?第1步消元——在增廣矩陣(A,b)第一列中…

Hive的使用之控制臺

啟動方式 1、如果將hive的bin(/home/hive2.1/bin)配置了環境變量,則輸入:hive。 2、 #hive --service cli 啟動 退出方式 1、hive>quit; 2、ctrlc 實例 ---------hivesql兼容大部分sql------- hive>show tables; hiv…

簡述計算機文件的命名辦法,如何進行文件命名-如何進行文件管理

如何進行文件命名-如何進行文件管理電腦的管理事實上就是文件和文件夾的管理。想要我們的電腦干凈整齊,就需要我們正確的進行文件管理。我們知道了文件和文件夾的概念之后,現在我們再來看看單獨的文件,認識一下文件的構成以及文件命名和命名規…