您好,登錄后才能下訂單哦!
這篇文章主要介紹了Mysql中基于GTID的復制模式是什么,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
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
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Mysql中基于GTID的復制模式是什么”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。