MySQL GTID復(fù)制

備注:測(cè)試數(shù)據(jù)庫(kù)版本為MySQL 8.0

這個(gè)blog我們來(lái)聊聊MySQL 的主從GTID復(fù)制

概述

GTID復(fù)制又叫全局事物ID(global transaction ID)箱锐,是一個(gè)已提交事物的編號(hào)畔裕,并且是一個(gè)全局唯一的編號(hào)瓢宦,MYSQL5.6版本之后在主從復(fù)制類型上新增了GTID復(fù)制。

GTID是由server_uuid和事物id組成的垦垂,即GTID=servier_uuid:transacton_id。Server_uuid是在數(shù)據(jù)庫(kù)啟動(dòng)過(guò)程中自動(dòng)生成的,每臺(tái)機(jī)器的server-uuid不一樣攻谁。UUID存放在數(shù)據(jù)目錄的auto.cnf文件下。而trasaciton_id就是事物提交時(shí)由系統(tǒng)順序分配的一個(gè)不會(huì)重復(fù)的序列號(hào)弯予。

GTID存在的價(jià)值:
1戚宦、GTID使用master_auto_position=1 代替了基于binlog和position號(hào)的主從復(fù)制搭建的方式,更便于主從復(fù)制的搭建锈嫩。
2受楼、GTID可以知道事務(wù)在最開始是在哪個(gè)實(shí)例上提交的。
3呼寸、GTID方便實(shí)現(xiàn)主從之間的failover艳汽,再也不用不斷的去找position和binlog。

GTID搭建模式:
GTID不需要傳統(tǒng)的binlog和position號(hào)了对雪,而是在從庫(kù)”change master to”時(shí)使用”master_auto_position=1”的方式搭建河狐,這就讓操作變得更加方便和可靠了。

GTID使用限制條件
GTID復(fù)制是針對(duì)事物慌植,一個(gè)gtid對(duì)于一個(gè)事務(wù)甚牲。
1、 不能使用create table table_name select * from table_name蝶柿。
2丈钙、 在一個(gè)事務(wù)中即包含事務(wù)表的操作,又包含非事物表交汤。
3雏赦、 不支持create temporary table or drop temporary table語(yǔ)句操作劫笙。
4、 使用GTID復(fù)制從庫(kù)調(diào)過(guò)錯(cuò)誤星岗,不支持執(zhí)行slave_skip_errors填大。

一.傳統(tǒng)復(fù)制切換成GTID過(guò)程

主從數(shù)據(jù)庫(kù)服務(wù)器同時(shí)修改以下參數(shù):

-- error log 不會(huì)出現(xiàn)警告信息,如果有俏橘,需要先修復(fù)允华,才能繼續(xù)后面操作。
set global enforce_gtid_consistency=warn; 
set global enforce_gtid_consistency=on;
set global gtid_mode=off_permissive;
set global gtid_mode=on_permissive;
mysql> set global enforce_gtid_consistency=warn; 
Query OK, 0 rows affected (0.00 sec)

mysql> set global enforce_gtid_consistency=on;
Query OK, 0 rows affected (0.00 sec)

mysql> set global gtid_mode=off_permissive;
Query OK, 0 rows affected (0.01 sec)

mysql> set global gtid_mode=on_permissive;
Query OK, 0 rows affected (0.01 sec)

確認(rèn)從庫(kù)沒(méi)等待的事務(wù):
0代表沒(méi)有等待的事務(wù)寥掐。

mysql> show global status like '%ongoing%';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0     |
+-------------------------------------+-------+
1 row in set (0.00 sec)

主從庫(kù)上同時(shí)設(shè)置gtid_mode=on;

set global gtid_mode=OFF_PERMISSIVE;
set global gtid_mode=ON_PERMISSIVE;
set global enforce_gtid_consistency=on;
set global gtid_mode=on;
show variables like '%gtid%';
mysql> set global gtid_mode=OFF_PERMISSIVE;
Query OK, 0 rows affected (0.00 sec)

mysql> set global gtid_mode=ON_PERMISSIVE;
Query OK, 0 rows affected (0.01 sec)

mysql> set global gtid_mode=ON;
ERROR 3111 (HY000): SET @@GLOBAL.GTID_MODE = ON is not allowed because ENFORCE_GTID_CONSISTENCY is not ON.
mysql> set global enforce_gtid_consistency=on;
Query OK, 0 rows affected (0.01 sec)

mysql> set global gtid_mode=ON;
Query OK, 0 rows affected (0.01 sec)

mysql> show variables like '%gtid%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | ON        |
| gtid_executed                    |           |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | ON        |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+
9 rows in set (0.02 sec)

把傳統(tǒng)復(fù)制模式改為(GTID)復(fù)制

stop slave;
change master to master_auto_position=1;
start slave;
show slave status \G
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)

mysql> change master to master_auto_position=1;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

mysql> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.31.1.112
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000017
          Read_Master_Log_Pos: 156
               Relay_Log_File: ipctest-relay-bin.000003
                Relay_Log_Pos: 365
        Relay_Master_Log_File: binlog.000017
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 156
              Relay_Log_Space: 576
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 08260f93-cbe5-11ea-bd0d-000c293fa60d
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 16186d18-cbe5-11ea-8c79-000c297ccd64:1
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
       Master_public_key_path: 
        Get_master_public_key: 0
            Network_Namespace: 
1 row in set (0.00 sec)

mysql> 

二.GTID復(fù)制與傳統(tǒng)復(fù)制的切換

主庫(kù)

mysql> show master status;
+---------------+----------+--------------+------------------+------------------------------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+---------------+----------+--------------+------------------+------------------------------------------+
| binlog.000017 |      648 |              |                  | 08260f93-cbe5-11ea-bd0d-000c293fa60d:1-2 |
+---------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

主從同時(shí)執(zhí)行
把gtid_mode=off和enforce_gtid_consistency=off寫入主從庫(kù)配置文件中靴寂。重啟后可以繼續(xù)生效,并進(jìn)行測(cè)試召耘。

set global gtid_mode='on_permissive';
set global gtid_mode='off_permissive';
set global enforce_gtid_consistency=off;
set global gtid_mode=off;

從庫(kù)切換操作:

stop slave;
change master to master_auto_position=0;
change master to
master_host='10.31.1.112',
master_user='repl',
master_password='test',
MASTER_LOG_FILE='binlog.000017',
MASTER_LOG_POS=648 ,
get_master_public_key=1;
start slave;
show slave status \G

參考文獻(xiàn):

1.https://www.cnblogs.com/hmwh/p/9198705.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末百炬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子污它,更是在濱河造成了極大的恐慌剖踊,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衫贬,死亡現(xiàn)場(chǎng)離奇詭異协饲,居然都是意外死亡杖小,警方通過(guò)查閱死者的電腦和手機(jī)筷黔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門含滴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)待德,“玉大人轰异,你說(shuō)我怎么就攤上這事铝穷≡砀剩” “怎么了斧散?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵供常,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鸡捐,道長(zhǎng)栈暇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任箍镜,我火速辦了婚禮源祈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘色迂。我一直安慰自己香缺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布歇僧。 她就那樣靜靜地躺著图张,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祸轮,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天兽埃,我揣著相機(jī)與錄音,去河邊找鬼适袜。 笑死柄错,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苦酱。 我是一名探鬼主播鄙陡,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼躏啰!你這毒婦竟也來(lái)了趁矾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤给僵,失蹤者是張志新(化名)和其女友劉穎毫捣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帝际,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔓同,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蹲诀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斑粱。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖脯爪,靈堂內(nèi)的尸體忽然破棺而出则北,到底是詐尸還是另有隱情,我是刑警寧澤痕慢,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布尚揣,位于F島的核電站,受9級(jí)特大地震影響掖举,放射性物質(zhì)發(fā)生泄漏快骗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一塔次、第九天 我趴在偏房一處隱蔽的房頂上張望方篮。 院中可真熱鬧,春花似錦励负、人聲如沸藕溅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜈垮。三九已至耗跛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攒发,已是汗流浹背调塌。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惠猿,地道東北人羔砾。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像偶妖,于是被迫代替她去往敵國(guó)和親姜凄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354