MySQL中GTID 模式的使用
TID(Global Transaction ID,全局事務(wù) ID)是 MySQL 復(fù)制體系的一種機(jī)制,用來(lái)唯一標(biāo)識(shí)每一個(gè)事務(wù),從而讓主從復(fù)制變得更可靠、更自動(dòng)化、更不容易出錯(cuò)。
一句話總結(jié):
GTID = 給每個(gè)事務(wù)一個(gè)全球唯一的身份證號(hào),讓復(fù)制自動(dòng)、可追蹤、可恢復(fù)。
GTID 的結(jié)構(gòu)
GTID 的格式是:
source_id:transaction_id
例如:
3E11FA47-71CA-11E1-9E33-C80AA9429562:12345
- source_id:通常是主庫(kù)的 server_uuid
- transaction_id:從 1 開(kāi)始遞增的事務(wù)序號(hào)
GTID 模式解決了什么問(wèn)題?
傳統(tǒng)復(fù)制(基于 binlog 文件 + position)有幾個(gè)痛點(diǎn):
| 問(wèn)題 | 傳統(tǒng)復(fù)制 | GTID |
|---|---|---|
| 主從切換 | 需要手動(dòng)找 binlog 文件和位置 | 自動(dòng)定位,秒級(jí)切換 |
| 數(shù)據(jù)恢復(fù) | 容易錯(cuò)位、跳點(diǎn) | 自動(dòng)跳過(guò)已執(zhí)行事務(wù) |
| 復(fù)制一致性 | 依賴人工操作 | 事務(wù)級(jí)別精確一致 |
| 故障恢復(fù) | 麻煩 | 自動(dòng)找位置、自動(dòng)恢復(fù) |
所以 GTID 的核心價(jià)值是:
讓復(fù)制變得自動(dòng)化、可恢復(fù)、可追蹤,特別適合高可用架構(gòu)(MGR、主從、ProxySQL)。
GTID 的工作原理(你會(huì)喜歡這個(gè)解釋)
- 主庫(kù)執(zhí)行一個(gè)事務(wù) → 生成一個(gè)唯一 GTID
- 主庫(kù)把 GTID 寫(xiě)入 binlog
- 從庫(kù)拉取 binlog
- 從庫(kù)檢查:
- 如果這個(gè) GTID 已經(jīng)執(zhí)行過(guò) → 跳過(guò)
- 如果沒(méi)執(zhí)行 → 執(zhí)行并記錄
- 從庫(kù)把已執(zhí)行的 GTID 集合記錄在
gtid_executed中
這意味著:
從庫(kù)永遠(yuǎn)不會(huì)重復(fù)執(zhí)行事務(wù),也不會(huì)漏執(zhí)行事務(wù)。
GTID 模式常見(jiàn)配置(MySQL 8.0.36 環(huán)境)
在 my.cnf 中:
gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON binlog_format=ROW
你現(xiàn)在的 MGR 環(huán)境本身就依賴 GTID,所以你已經(jīng)在使用它。
為什么 MGR 必須使用 GTID?
因?yàn)?MGR 是“事務(wù)級(jí)復(fù)制 + 共識(shí)協(xié)議”,它需要:
- 全局唯一事務(wù) ID
- 精確的事務(wù)順序
- 自動(dòng)沖突檢測(cè)
沒(méi)有 GTID,MGR 根本無(wú)法工作。
你作為架構(gòu)師應(yīng)該記住的 GTID 核心價(jià)值
- 自動(dòng)定位復(fù)制位置(不用再找 binlog 文件和 pos)
- 自動(dòng)跳過(guò)重復(fù)事務(wù)
- 主從切換更快、更安全
- 故障恢復(fù)更簡(jiǎn)單
- MGR、半同步、ProxySQL 都依賴它
GTID 是現(xiàn)代 MySQL 高可用體系的基礎(chǔ)。
到此這篇關(guān)于MySQL中GTID 模式的使用的文章就介紹到這了,更多相關(guān)MySQL GTID模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用phpmyadmin設(shè)置mysql的權(quán)限方法
這篇文章主要介紹了如何利用phpmyadmin設(shè)置mysql的權(quán)限方法,需要的朋友可以參考下2018-03-03
MySQL窗口函數(shù)OVER()用法及說(shuō)明
這篇文章主要介紹了MySQL窗口函數(shù)OVER()用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
MySQL中根據(jù)binlog日志進(jìn)行恢復(fù)的實(shí)現(xiàn)
MySQL的binlog功能為數(shù)據(jù)庫(kù)的恢復(fù)和故障排查提供了有力支持,本文主要介紹了MySQL中根據(jù)binlog日志進(jìn)行恢復(fù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2025-04-04
idea中使用mysql的保姆級(jí)教程(超詳細(xì))
我們開(kāi)發(fā)時(shí)經(jīng)常需要用到一些客戶端去訪問(wèn)數(shù)據(jù)庫(kù)查詢、更新數(shù)據(jù)等操作,下面這篇文章主要給大家介紹了關(guān)于idea中使用mysql的保姆級(jí)教程,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
mysql中使用replace替換某字段的部分內(nèi)容
這篇文章主要介紹了mysql中使用replace替換某字段的部分內(nèi)容的方法,需要的朋友可以參考下2014-11-11
mysql遠(yuǎn)程跨庫(kù)聯(lián)合查詢的示例
本文主要介紹了mysql遠(yuǎn)程跨庫(kù)聯(lián)合查詢的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
JDBC鏈接MySQL8的注意事項(xiàng)及說(shuō)明
這篇文章主要介紹了JDBC鏈接MySQL8的注意事項(xiàng)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
mysql刪除重復(fù)行的實(shí)現(xiàn)方法
這篇文章主要介紹了mysql刪除重復(fù)行的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06
MySQL數(shù)據(jù)庫(kù)添加外鍵的四種方式
這篇文章主要介紹了ysql數(shù)據(jù)庫(kù)添加外鍵的四種方式, 建表時(shí)直接使用FOREIGN KEY,建表時(shí)使用CONSTRAINT,在建表以后使用ALTER語(yǔ)句以及 使用第三方工具這四種方式,需要的朋友可以參考下2024-03-03

