mysql之 MySQL 主從基於 GTID 複製原理概述
一、 什麼是GTID ( Global transaction identifiers ):
MySQL-5.6.2開始支援,MySQL-5.6.10後完善,GTID 分成兩部分,一部分是服務的UUid,UUID儲存在mysql資料目錄的auto.cnf檔案中,
這是一個非常重要的檔案,不能刪除,這一部分是不會變的。另外一部分就是事務ID了,隨著事務的增加,值一次遞增,如下圖
+---------------+----------+--------------+------------------+--------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+--------------------------------------------+
| binlog.000029 | 23556 | | | 724afcc2-29d6-11e4-9902-000c290c0121:1-362 |
+---------------+----------+--------------+------------------+--------------------------------------------+
GTID:724afcc2-29d6-11e4-9902-000c290c0121:1-362
UUID:724afcc2-29d6-11e4-9902-000c290c0121
transactionId:1-362
在整個複製架構中GTID 是不變化的,即使在多個連環主從中也不會變。
例如:ServerA --->ServerB ---->ServerC
GTID從在ServerA ,ServerB,ServerC 中都是一樣的。
二、 GTID的工作原理:
1、master更新資料時,會在事務前產生GTID,一同記錄到binlog日誌中。
2、slave端的i/o 執行緒將變更的binlog,寫入到本地的relay log中。
3、sql執行緒從relay log中獲取GTID,然後對比slave端的binlog是否有記錄。
4、如果有記錄,說明該GTID的事務已經執行,slave會忽略。
5、如果沒有記錄,slave就會從relay log中執行該GTID的事務,並記錄到binlog。
6、在解析過程中會判斷是否有主鍵,如果沒有就用二級索引,如果沒有就用全部掃描。
三、 GTID的優點:
1.一個事務對應一個唯一ID,一個GTID在一個伺服器上只會執行一次
2.GTID是用來代替傳統複製的方法,GTID複製與普通複製模式的最大不同就是不需要指定二進位制檔名和位置
3.減少手工干預和降低服務故障時間,當主機掛了之後透過軟體從眾多的備機中提升一臺備機為主機
那麼GTID複製是怎麼實現自動同步,自動對應位置的呢?
例如:ServerC <-----ServerA ----> ServerB
主機ServerA
備機:ServerB,ServerC
當主機ServerA 掛了之後 ,此時ServerB執行完了所有從ServerA 傳過來的事務,
ServerC 延時一點。這個時候需要把 ServerB 提升為主機 ,Server C 繼續為備機。
當ServerC 連結ServerC 之後,首先在自己的二進位制檔案中找到從ServerA 傳過來的最新的GTID,
然後將這個GTID 傳送到ServerB ,ServerB 獲得這個GTID之後,就開始從這個GTID的下一個GTID
開始傳送事務給ServerC。這種自我尋找複製位置的模式減少事務丟失的可能性以及故障恢復的時間。
四、 GTID的限制:
1.不支援非事務引擎
2.不支援create table ... select 語句複製(主庫直接報錯)
原理:( 會生成兩個sql,一個是DDL建立表SQL,一個是insert into 插入資料的sql。
由於DDL會導致自動提交,所以這個sql至少需要兩個GTID,但是GTID模式下,只能給這個sql生成一個GTID )
3.不允許一個SQL同時更新一個事務引擎表和非事務引擎表
4.在一個複製組中,必須要求統一開啟GTID或者是關閉GTID
5.開啟GTID需要重啟(5.7除外)
6.開啟GTID後,就不再使用原來的傳統複製方式
7.對於create temporary table 和 drop temporary table語句不支援
8.不支援sql_slave_skip_counter
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2140577/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql之 MySQL 主從基於position複製原理概述MySql
- mysql GTID 主從複製概述MySql
- Mysql 基於GTID主從複製MySql
- MySQL主從複製之GTID複製MySql
- MySQL 5.7 基於GTID搭建主從複製MySql
- MySQL 5.7基於GTID的主從複製MySql
- mysql之 mysql 5.6不停機主從搭建(一主一從基於GTID複製)MySql
- MysqL主從複製_模式之GTID複製MySql模式
- 【MySQL】主從GTID複製修復MySql
- MySQL主從複製原理MySql
- MySQL(13)---MYSQL主從複製原理MySql
- mysql replication /mysql 主從複製原理MySql
- MySQL主從複製、半同步複製和主主複製概述MySql
- 基於GTID搭建主從MySQLMySql
- Mysql基於GTID的複製模式MySql模式
- MySQL 5.6 建立GTID主從複製 (GTID-based Replication)MySql
- 基於 Docker 的 MySQL 主從複製搭建及原理(真正弄懂)DockerMySql
- mysql 基於日誌的主從複製MySql
- MySQL基於binlog主從複製配置MySql
- Mysql主從複製原理及搭建MySql
- MySQL 主從複製原理不再難MySql
- mysql主從複製原理及配置MySql
- Mysql 8.4.0 結合 Docker 搭建GTID主從複製,以及傳統主從複製MySqlDocker
- mysql之 mysql 5.6不停機主從搭建(一主一從基於日誌點複製)MySql
- MySQL8.0輕鬆搞定GTID主從複製MySql
- MySQL主從複製之GTID模式詳細介紹鞴嬈MySql模式
- MySQL主從複製之半同步複製MySql
- MySQL主從複製之非同步複製MySql非同步
- Mysql5.6主從複製-基於binlogMySql
- MySQL的主從複製與MySQL的主主複製MySql
- 深入挖崛:mysql主從複製原理MySql
- mysql 5.7 主從複製搭建及原理MySql
- mysql的主從複製 原理講解MySql
- MySQL 主從複製的原理和配置MySql
- MySQL主從複製與主主複製MySql
- MySQL 主從複製MySql
- 【MySql】主從複製MySql
- MySQL主從複製MySql