共計 1624 個字符,預計需要花費 5 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章主要介紹了 Mysql 中基于 GTID 的復制模式是什么,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
GTID 定義
GTID(Global Transaction Identifier)全局事務標識。GTID 是 5.6 版本引入的一個有關于主從復制的重大改進,相對于之前版本基于 Binlog 文件 +Position 的主從復制,基于 GTID 的主從復制,數據一致性更高,主從數據復制更健壯,主從切換、故障切換不易出錯,很少需要人為介入處理。
表示方式
GTID = server_uuid:transaction_id
其 GTID 通常會記錄在 MySQL 的系統變量 @@GLOBAL.gtid_executed 以及系統表 mysql.gtid_executed 中,系統變量 @@GLOBAL.gtid_executed 在內存中,屬于非持久化存儲,而系統表 mysql.gtid_executed 屬于持久化存儲。
GTID 比傳統復制的優勢
更簡單的搭建主從復制
更簡單的實現 failover (主從切換),不用以前那樣一步一步的去找 log_file 和 log_pos
GTID 是連續的沒有空洞的,保證數據的一致性,零丟失。
復制集群有一個統一的方式識別復制位置,給集群管理帶來了便利
GTID 的限制
在一個事務里面混合使用引擎如 Innodb,myisam,造成多個 GTIDS
CREATE TABLE…..SELECT 不能使用
CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE 不能在事務內使用
主從復制流程圖
GTID 生命周期
當一個事務在一個主庫上被執行和提交,那么這個事務就會被分配一個和該主庫 uuid 相關聯的 gtid,這個 gtid 被寫入到主庫的 binlog 文件中。
當這個 binlog 文件達到最大值發生輪轉,或者 MySQL Server 關閉時,上一個 binlog 文件中的事務 GTID 將會被寫入到 mysql.gtid_executed 表中。
事務提交時,該事務的 gtid 會很快的添加到系統變量 @@GLOBAL.gtid_executed, 但是系統表 mysql.gtid_executed 則不會,應為有部分 gtid 還在 binlog 中,需要等到 binlog 輪轉或者 mysqlServer 關閉時才會寫入到 mysql。gtid_executed 表中.
主庫上的 binlog 通過主從復制協議傳送到從庫,并寫入到從庫的 relay log(中繼日志), 從庫讀取 relay log 中的 gtid 和對應的事務信息,把 gtid_next 設置為該 gtid 值,使得從庫使用該 gtid 值應用其對應的事務
如果多個線程并發應用同一個事務,比如多個線程設置 gtid_next 為同一個值,MySQL Server 只允許其中一個線程執行,gtid_owned 系統變量記錄著誰擁有該 GTID.
傳統更換 GTID 復制模式
配置 GTID
所有服務器設置 global.read_only 參數,等待主從服務器同步完畢;
mysql SET @@global.read_only = ON;
依次重啟主從服務器;
使用 change master 更新主從配置;
mysql CHANGE MASTER TO
MASTER_HOST = host,
MASTER_PORT = port,
MASTER_USER = user,
MASTER_PASSWORD = password,
MASTER_AUTO_POSITION = 1;
5、開啟復制
mysql START SLAVE;
6、驗證主從復制
mysql show slave status \G
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“Mysql 中基于 GTID 的復制模式是什么”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!
向 AI 問一下細節