MySQL的GTID詳解

GTID(Global Transaction Identifier,全局事務標識符)是MySQL 5.6及以上版本引入的重要特性,用于在主從復制環境中唯一標識每個事務,簡化復制管理、故障轉移和數據一致性維護。以下從多維度詳細介紹GTID:

一、GTID的定義與核心作用

GTID是一個全局唯一的字符串,用于標識數據庫中已提交的事務。它的核心作用是:

  • 在主從復制環境中,通過GTID追蹤事務的執行狀態,替代傳統復制中依賴的“binlog文件名+位置”定位方式。
  • 確保每個事務在整個復制集群中具有唯一標識,便于快速判斷從庫是否已執行主庫的所有事務,簡化同步管理和故障轉移。
二、GTID的組成結構

GTID的格式為**UUID:TRX_ID**,由兩部分組成:

  • UUID(全局唯一標識符):標識產生事務的數據庫實例(主庫或從庫),每個MySQL實例的auto.cnf文件中記錄了自身的UUID(server-uuid),確保實例唯一。
  • TRX_ID(事務ID):在該實例上按順序自增的整數,標識該實例上的第N個事務(從1開始累加)。

示例3E11FA47-71CA-11E1-9E33-C80AA9429562:10

  • 表示UUID為3E11FA47-71CA-11E1-9E33-C80AA9429562的實例上提交的第10個事務。
三、GTID的工作原理

GTID的核心邏輯是“事務與GTID一一綁定”,其工作流程可分為3個階段:

1. 主庫生成GTID

當主庫提交一個事務時:

  • 若事務是寫入操作(如INSERT/UPDATE/DELETE),MySQL會自動為該事務分配一個GTID(格式為“主庫UUID:自增TRX_ID”)。
  • GTID會被寫入主庫的binlog中(作為事務的前綴,如SET @@SESSION.GTID_NEXT='UUID:TRX_ID'),同時記錄事務內容。
2. 從庫獲取并執行GTID事務

從庫通過IO線程讀取主庫的binlog,解析出GTID和對應的事務:

  • 從庫先檢查自身的gtid_executed集合(記錄已執行的所有GTID),若該GTID未存在,則執行事務,并將GTID添加到gtid_executed中;
  • 若該GTID已存在,則跳過事務(避免重復執行)。
3. 復制狀態追蹤

通過GTID,可直接通過對比主庫的gtid_executed(主庫已執行的事務)和從庫的gtid_executed,判斷從庫是否落后于主庫,無需依賴binlog文件名和位置。

四、GTID復制與傳統復制的核心區別

傳統復制(基于binlog位置)與GTID復制的對比如下:

維度傳統復制GTID復制
定位事務依賴master_log_filemaster_log_pos依賴GTID(自動定位需執行的事務)
故障轉移需手動查找從庫最后執行的binlog位置自動通過GTID匹配,無需手動定位
重復執行風險可能因位置錯誤導致重復執行基于GTID自動去重,避免重復執行
管理復雜度高(需記錄和維護binlog位置)低(通過GTID自動管理同步狀態)
五、GTID的核心優勢
  1. 簡化主從配置與故障轉移
    搭建主從時,無需指定主庫的binlog文件名和位置,只需通過MASTER_AUTO_POSITION=1開啟自動GTID定位(如CHANGE MASTER TO MASTER_AUTO_POSITION=1)。
    主庫故障后,從庫可直接作為新主庫,其他從庫通過GTID自動同步新主庫的事務,無需人工干預。

  2. 避免事務重復執行
    從庫通過gtid_executed記錄已執行的GTID,確保每個事務僅執行一次,解決傳統復制中因位置錯誤導致的重復執行問題。

  3. 便于監控與審計
    通過SHOW GLOBAL VARIABLES LIKE 'gtid_executed'可直接查看實例已執行的所有事務,通過PERFORMANCE_SCHEMA可追蹤事務的執行狀態,便于問題排查。

  4. 支持并行復制優化
    在MySQL 5.7+中,GTID可與slave-parallel-type=LOGICAL_CLOCK配合,實現基于事務依賴的并行復制,提升從庫同步效率。

六、GTID的使用場景

GTID主要用于主從復制環境,包括但不限于:

  • 一主多從、級聯復制(主→從→從)架構;
  • 讀寫分離場景(確保從庫數據與主庫一致);
  • 高可用架構(如MGR、Keepalived+MySQL)中的故障自動轉移;
  • 數據遷移(通過GTID確保遷移前后事務一致性)。
七、GTID的配置步驟

開啟GTID需在主庫和從庫的my.cnf(或my.ini)中配置以下參數,重啟MySQL生效:

1. 核心配置參數
參數名作用說明推薦值
gtid_mode開啟GTID模式(OFF/ON/ON_PERMISSIVE/OFF_PERMISSIVEON
enforce_gtid_consistency強制GTID一致性(防止執行與GTID沖突的語句,如CREATE TABLE ... SELECTON
log_bin開啟binlog(GTID依賴binlog記錄事務)/var/log/mysql/mysql-bin.log
binlog_formatbinlog格式(GTID需配合ROW格式,確保事務一致性)ROW
server-id實例唯一ID(主從必須不同)主庫1,從庫2(示例)
2. 配置示例(主庫和從庫均需配置)
[mysqld]
server-id = 1  # 主庫1,從庫2
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
3. 驗證GTID是否啟用

登錄MySQL后執行以下命令,若返回ON則表示啟用成功:

SHOW VARIABLES LIKE 'gtid_mode';  -- 結果應為ON
SHOW VARIABLES LIKE 'enforce_gtid_consistency';  -- 結果應為ON
八、GTID的關鍵狀態變量

通過以下變量可監控GTID的執行狀態:

變量名含義
gtid_executed實例已執行的所有GTID(格式為UUID1:TRX_RANGE1,UUID2:TRX_RANGE2
gtid_purged已從binlog中清理的GTID(這些事務的binlog已被刪除)
gtid_next下一個要執行的GTID(會話級變量,默認AUTOMATIC表示自動生成)
gtid_owned當前正在執行的GTID(未提交的事務)
九、使用GTID的注意事項
  1. 兼容性限制

    • 部分語句在enforce_gtid_consistency=ON時被禁止,如CREATE TABLE ... SELECTINSERT ... SELECT(需拆分為兩個語句);
    • 不支持臨時表的事務(CREATE TEMPORARY TABLE)在GTID模式下可能導致一致性問題,需避免。
  2. GTID的清理與維護

    • gtid_purged記錄已清理的GTID,若從庫的gtid_executed包含gtid_purged中的事務,主從復制可能失敗(需確保從庫先于主庫清理GTID);
    • 可通過PURGE BINARY LOGS清理過期binlog,但需同步更新gtid_purged(自動關聯)。
  3. 避免GTID沖突

    • 主從切換時,需確保新主庫的gtid_executed包含所有從庫的gtid_executed,否則可能出現GTID重復(導致事務執行失敗);
    • 禁止在多個實例上手動設置相同的GTID(如SET GTID_NEXT='UUID:X'; BEGIN; ... COMMIT)。
  4. 降級與禁用GTID
    若需禁用GTID,需先將gtid_modeON逐步切換為ON_PERMISSIVEOFF_PERMISSIVEOFF,避免直接關閉導致復制中斷。

十、常見問題與解決方案
  1. 從庫提示“GTID在主庫中不存在”
    原因:主庫的gtid_purged已清理該GTID對應的binlog,從庫無法獲取事務。
    解決:重新搭建從庫(通過全量備份+GTID同步)。

  2. 事務執行后GTID未記錄
    原因:事務未寫入binlog(如SET sql_log_bin=0關閉了binlog)。
    解決:確保sql_log_bin=1(默認開啟),事務需寫入binlog才會生成GTID。

  3. 主從GTID不一致
    原因:主庫執行了從庫未執行的事務,或從庫多執行了事務。
    解決:通過pt-table-checksum校驗數據一致性,手動補充缺失事務或回滾多余事務。

總結

GTID通過全局唯一標識事務,極大簡化了MySQL主從復制的管理和故障轉移,是大規模數據庫集群中不可或缺的特性。掌握其原理、配置和注意事項,能有效提升復制架構的可靠性和可維護性。

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

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

相關文章

專題:2025中國游戲科技發展研究報告|附130+份報告PDF、原數據表匯總下載

原文鏈接:https://tecdat.cn/?p42756 本報告匯總解讀基于艾瑞咨詢《2025中國游戲科技發展白皮書》、伽馬數據《2025年1-3月中國游戲產業季度報告》、嘉世咨詢《2025中國單機游戲市場現狀報告》等多份行業研報數據。當《黑神話:悟空》以虛幻引擎5復刻東…

【數據挖掘】數據挖掘綜合案例—銀行精準營銷

要求: 1、根據相關的信息預測通過電話推銷,用戶是否會在銀行進行存款 2、數據bank.csv,約4520條數據,17個屬性值 提示: 17個屬性,分別是年齡,工作類型,婚姻狀況,受教育…

postgresql查看鎖的sql語句

發現一個查看postgresql鎖比較好的sql語句,參考鏈接地址如下 鏈接地址 查看鎖等待sql witht_wait as(select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.trans…

JSON 格式詳解

JSON 格式詳解 隨著互聯網的發展和各種 Web 應用程序的普及,數據交換已經成為了我們日常開發中的重要環節。而在各種數據交換格式中,JSON(JavaScript Object Notation)作為一種輕量級的數據交換格式,以其簡潔、易于閱…

原型設計Axure RP網盤資源下載與安裝教程共享

對于初學者來說,我們熟悉一下其定義:?Axure RP是一款常用的快速原型設計工具?,主要用于創建應用軟件或Web網站的線框圖、流程圖、原型和規格說明文檔,廣泛應用于產品經理、UI/UX設計師等專業領域。?? 主要用戶群體&#xff1…

iframe嵌套 redirect中轉頁面 route跳轉

需求是項目A要使用iframe內嵌項目B的頁面, 由于需要嵌套的頁面很多,每個頁面路徑和參數又各不相同, 所以我們在項目B里做了一個中轉頁面,這樣就能自己掌控項目A傳遞過來的東西了; routes.js 增加一個菜單:…

IP數據報 封裝成 MAC幀 ( 目的MAC地址6B 源MAC地址6B 類型2B 數據部分 FCS校驗和4B )

將 IP 數據報(Internet Protocol Datagram)封裝成 MAC 幀 需要在數據鏈路層添加適當的頭部信息,以便在局域網內進行傳輸。這個過程涉及將網絡層(IP 層)的數據通過數據鏈路層(MAC 層)封裝成適合物…

Note2.4 機器學習:Batch Normalization Introduction

Batch Normalization(批標準化,BN)通過標準化數據的操作,使得損失函數的優化地形(optimization landscape)更加平滑,從而達到更好地訓練效果。BN常用于卷積神經網絡(CNN)…

IDEA在AI時代的智能編程實踐:從工蜂到通義靈碼的效能躍遷??

引言? 在騰訊云工作期間,我曾使用?工蜂的AI代碼補全功能,結合IntelliJ IDEA(以下簡稱IDEA)極大提升了開發效率。如今離開騰訊云,面對外部開發環境,如何繼續利用AI提升編碼效率?本文將系統梳理…

MySQL 慢查詢日志詳解

慢查詢日志(Slow Query Log)是 MySQL 提供的一種核心性能優化工具,用于記錄執行時間超過指定閾值的 SQL 語句。通過分析這些日志,可以定位數據庫性能瓶頸,優化低效查詢,提升系統整體效率。 一、慢查詢日志的…

UV安裝Python指南總結

UV安裝Python指南總結 UV是一個Python包管理工具,它可以幫助我們安裝和管理Python版本。以下是關于UV安裝Python的主要功能和用法總結。 基本使用 安裝最新版Python uv python install注意:UV使用Astral的python-build-standalone項目提供的Python發行版,而不是…

運維基礎-MYSQL數據庫-筆記

序 欠10年前自己的一份筆記,獻給今后的自己。 數據庫介紹 數據的時代 涉及的數據量大數據不隨程序的結束而消失數據被多個應用程序共享大數據 數據庫的發展史 萌芽階段:文件系統 使用磁盤文件來存儲數據初級階段:第一代數據庫 出現了網狀…

從GPTs到Real智能體:目前常見的幾種創建智能體方式

文章目錄 智能體的三個發展階段低階智能體(面向過程) VS 高階智能體(面向目標)主流智能體創建平臺實踐基礎型平臺cherry-studio豆包訊飛星火騰訊元器 高階智能體開發體系cline開發套件Coze平臺Dify開源框架Manus突破性方案 技術演進趨勢總結 智能體的三個發展階段 當前智能體技…

WPF 實現自定義數字輸入彈窗

1.前端代碼實現 <Grid><Grid.RowDefinitions><RowDefinition Height"100" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0…

基于yolo海洋垃圾物品識別系統flask

查看完整項目包點擊文末名片 項目簡介 本項目 基于YOLO的海洋垃圾物品識別系統 旨在利用深度學習中的YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;實現對海洋垃圾的自動識別與分類。通過構建一個基于Flask的Web應用&#xff0c;用戶可以方便地上傳圖片&…

從數據到決策:UI前端如何利用數字孿生技術提升管理效率?

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型的深水區&#xff0c;企業管理者正面臨數據過載與決策滯后的雙重挑戰 ——IDC 研…

Spring Boot高并發 鎖的使用方法

Spring Boot高并發 鎖的使用方法 在高并發場景中&#xff08;比如電商秒殺、搶票系統、轉賬交易&#xff09;&#xff0c;多個線程/用戶會同時操作同一共享資源&#xff08;如庫存、賬戶余額、訂單號&#xff09;。如果不做控制&#xff0c;會導致數據錯誤&#xff08;如庫存超…

二十九:Dynamic Prompts插件動態提示詞講解

引言:可變化提示詞,隨機抽取不固定 使用方式一:{提示詞1|提示詞2|。。。。}------從提示詞種隨機抽取生成 方式二:{25::提示詞1|75::提示詞2}------數字為每個提示詞的占比,相當于權重 方式三:{2$$提示詞1|提示詞2|提示詞3|提示詞4|。。。}從中選區2個搭配生成(可以換 比…

vscode 改注釋的顏色,默認是灰色的,想改成紅色

修改VScode編輯器默認注釋的顏色_databricks代碼中怎么設置讓注釋是灰色的-CSDN博客 //改變注釋顏色"editor.tokenColorCustomizations": {"comments": "#009933" // 注釋}, //如果后面還加內容&#xff0c;記得塊末用逗號隔開我自己用的vscdoe.…

chili3d筆記22 正交投影3d重建筆記3 面構建

雙視圖重建3d solid import { FaceNode } from "chili"; import {IDocument,IEdge,Logger,ShapeNode,XYZ } from "chili-core"; import { Graph } from "graphlib"; function pointToString(point: XYZ): string {return ${point.x.toFixed(0)}-…