基于GTID的復制

Ⅰ、GTID的介紹

  • global transaction id identifier 全局事務id
  • gtid = server_uuid + transaction_id
  • server_uuid是全局唯一的虚茶,5.6開始才有媳危,表示當前實例的uuid待笑,保存在數(shù)據(jù)目錄中的auto.conf文件中
  • transaction_id是自增的
  • gtid的作用是替代filename + position

主:show master status;

(root@localhost) [test]> show master status;
+------------+----------+--------------+------------------+----------------------------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                      |
+------------+----------+--------------+------------------+----------------------------------------+
| bin.000006 |      408 |              |                  | d565cde8-0573-11e8-89b2-525400a4dac1:1 |
+------------+----------+--------------+------------------+----------------------------------------+
1 row in set (0.00 sec)
Executed_Gtid_set:server_id:1-xxxx     表示產(chǎn)生了xxx個事務

從:show master status;
Retrieved_Gtid_Set: d565cde8-0573-11e8-89b2-525400a4dac1:1
Executed_Gtid_Set: d565cde8-0573-11e8-89b2-525400a4dac1:1
也能看到事務號

tips:
如果做了A和B做了雙主,B上一直在同步A上數(shù)據(jù)癌压,這時候在B上寫入一個事務

A上看下Executed_Gtid_set滩届,會發(fā)現(xiàn)有兩個值

一個是自己做主當前的事務號,一個是同步的從上的事務號

Ⅱ棠枉、GTID的意義

之前的復制基于(file,pos),當主從發(fā)生宕機辈讶,切換的時候有問題

slave保存的是原master上的(file,pos)娄猫,無法直接指向新master上的(file,pos)

mha通過relay log來判斷(非常有技術性)

gtid實現(xiàn)了真正的全局唯一位置(所有機器上都是統(tǒng)一的)

更容易進行failover操作

舉例:

a是master贱除,b c d是slave,a掛了媳溺,b做主月幌,c d做change master

此時c d 上的pos卻還是a上面的pos,和b沒有對應關系褂删,文件名飞醉,文件大小,position完全不一樣,change不起來

使用gtid的話缅帘,b上保存著c和d回放的位置G_a轴术、G_b(b是通過選舉出來的,保存著最多的日志)

Ⅲ钦无、gtid配置

[mysqld]
log_bin
gtid_mode = ON
log_slave_updates = 1          5.6必須開逗栽,5.7可以不開
enforce-gtid-consistency = 1

tips:

  • MySQL5.6必須開啟參數(shù)log_slave_updates,5.7.6開始無需配置
  • MySQL5.6升級到gtid模式需要停機重啟
  • MySQL5.7.6版本開始可以在線升級gtid模式
  • 5.6中gtid用的比較少,最重要的原因在于gtid要么開要么不開,不能做到非gtid升級到gtid
  • gtid是一切高可用基礎(gr,mha),強烈建議打開摧冀,5.6就有了,很成熟了
5.7的gtid_mode可選值
ON                      完全打開GTID,如果打開狀態(tài)的備庫接受到不帶GTID的事務,則復制中斷
ON_PERMISSIVE           可以認為是打開gtid前的過渡階段秉宿,主庫在設置成該值后會產(chǎn)生GTID,同時備庫依然容忍帶GTID和不帶GTID的事務
OFF_PERMISSIVE          可以認為是關閉GTID前的過渡階段今艺,主庫在設置成該值后不再生成GTID,備庫在接受到帶GTID和不帶GTID事務都可以容忍
                        主庫在關閉GTID時实牡,執(zhí)行事務會產(chǎn)生一個Anonymous_Gtid事件,會在備庫執(zhí)行:set @@session.gtid_next='anonymous'
OFF                     徹底關閉GTID偎谁,如果關閉狀態(tài)的備庫收到帶GTID的事務铐望,則復制中斷
之前只有ON和OFF

平滑開啟gtid
set global gtid_mode = 'off_permissive';
set global gtid_mode = 'on_permissive';
set global enforce_gtid_consistency = 'on'
set global gtid_mode = 'ON';

平滑關閉gtid
stop slave;
set global gtid_mode = 'on_permissive';
set global gtid_mode = 'off_permissive';
change master to master_auto_position = 0;
set global gtid_mode = 'OFF';
set global enforce_gtid_consistency = 'off'
start slave;

主從上都依次敲下來

Ⅳ跟畅、簡單說下搭建過程

大同小異蒜危,全備+binlog

開啟gtid后部翘,mysqldump備份單庫時會報warning夹囚,意思是gtid包含所有事務,只備份了單庫,忽略即可

用mydumper備份掏父,看下metadata文件陶缺,找到gitd:xxxxxx:x-xxx

這玩意等同于mysqldump備份文件中set @@global.gtid_purged='xxxx:x-xxx';

表示這部分gtids對應的事務已經(jīng)在備份中了,slave在還原備份后復制時百框,需要跳過這些gtids

reset master;   清空@@GLOBAL.GTID_EXECUTED嫁蛇,不然執(zhí)行下一步會報錯
SET @@GLOBAL.GTID_PURGED = '找出來的位置'
以上操作mysqldump出來的文件導入無需操作闸拿,mydumper要手動,因為myloader不執(zhí)行這個

最后一把change master送給大家
change master to master_host='127.0.0.1', master_port=3306, master_user='rpl', master_password='123', MASTER_AUTO_POSITION=1;
start slave;

tips:

  • binlog文件中會有兩個關于gtid的event——Previous_gtids和Gtid
  • 通過掃描binlog中的gtid值,可以知道gtid與filename-pos的對應關系严衬,如果binlog很大请琳,掃描量也很大,所以用Previous_gtid來記錄之前一個binlog文件中最大的gtid
  • 如果要找的gtid比previous_gtids大赠幕,就掃描當前文件俄精,反之掃之前的文件竖慧,依次類推
  • binlog在rotate的時候,是知道當前最大gtid的诫惭,將該值,寫入下個binlog的文件頭赢笨,即previous_gtids

Ⅴ梅忌、GTID復制中處理報錯小技巧

這里模擬一個1062錯誤即可狰腌,不演示

報錯會告訴你對應的gtid

操作步驟如下:

  • 我們將gtid_next指向報錯的gtid

報錯中沒有gtid,則用Retrieved_Gtid_Set和Executed_Gtid_Set對比一下就知道哪個事務執(zhí)行出錯了

(root@localhost) [(none)]> set gtid_next='xxxxxx:xxxx';  # 設置為之前失敗的那個GTID的值
Query OK, 0 rows affected (0.00 sec)
  • 執(zhí)行一個空事務
(root@localhost) [(none)]> begin;commit;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
  • 將gtid_next還原為automatic
(root@localhost) [(none)]> set gtid_next="automatic";
Query OK, 0 rows affected (0.00 sec)

(root@localhost) [(none)]> stop slave;
Query OK, 0 rows affected (0.01 sec)
(root@localhost) [(none)]> start slave;
Query OK, 0 rows affected (0.07 sec)

該操作類似于sql_slave_skip_counter铸鹰,只是跳過錯誤癌别,不能保證數(shù)據(jù)一致性,需要人工介入蹋笼,固強烈建議從機開啟read_only=1

Ⅵ展姐、GTID的限制

  • 在開啟GTID后,不能在一個事物中使用創(chuàng)建臨時表的語句剖毯,需要使得 autocommit=1;才可以圾笨。5.7開始直接創(chuàng)建臨時表已經(jīng)可以創(chuàng)建了
  • 在開啟GTID后,不能使用create table select ... 的語法來創(chuàng)建表了逊谋,因為這其實是多個事物了擂达,GTID沒法對應
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市胶滋,隨后出現(xiàn)的幾起案子板鬓,更是在濱河造成了極大的恐慌,老刑警劉巖究恤,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件俭令,死亡現(xiàn)場離奇詭異,居然都是意外死亡部宿,警方通過查閱死者的電腦和手機抄腔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來理张,“玉大人赫蛇,你說我怎么就攤上這事∥戆龋” “怎么了悟耘?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長织狐。 經(jīng)常有香客問我作煌,道長掘殴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任粟誓,我火速辦了婚禮,結(jié)果婚禮上起意,老公的妹妹穿的比我還像新娘鹰服。我一直安慰自己,他們只是感情好揽咕,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布悲酷。 她就那樣靜靜地躺著,像睡著了一般亲善。 火紅的嫁衣襯著肌膚如雪设易。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天蛹头,我揣著相機與錄音顿肺,去河邊找鬼。 笑死渣蜗,一個胖子當著我的面吹牛屠尊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耕拷,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼讼昆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骚烧?” 一聲冷哼從身側(cè)響起浸赫,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赃绊,沒想到半個月后既峡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡凭戴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年涧狮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片么夫。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡者冤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出档痪,到底是詐尸還是另有隱情涉枫,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布腐螟,位于F島的核電站愿汰,受9級特大地震影響困后,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衬廷,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一摇予、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吗跋,春花似錦侧戴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疆拘,卻和暖如春蜕猫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哎迄。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工回右, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芬失。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓楣黍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棱烂。 傳聞我的和親對象是個殘疾皇子租漂,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 摘要:本節(jié)將集中討論下面三種GTID更新的時機,這部分相當重要颊糜,后面的故障案列會和這節(jié)有關哩治。下面先來看一下他們的定...
    暖夏未眠丶閱讀 1,314評論 0 1
  • 網(wǎng)上關于MySQL官方版本的GTID復制文章很多,我就不再贅述衬鱼。我這里主要想寫一點關于MariaDB的GTID復制...
    0d42206c1f8d閱讀 1,481評論 0 0
  • 環(huán)境 操作系統(tǒng):CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6....
    思夢PHP閱讀 2,045評論 0 12
  • 屏窗遠眺幾多臨业筏,極目楚天色漸連。 謝公海日今還在鸟赫,天道循環(huán)任乾坤蒜胖。 日照海云灼輝現(xiàn),機展鐵翼遨空旋抛蚤。 瞬行...
    如夢塵緣閱讀 288評論 8 10
  • 11.27 今天上午接到了伊莫的電話台谢,我們探討了怎樣合理安排時間。他給我講:1.對于日計劃內(nèi)容岁经,無論如何要當天完成...
    TA76廣新閱讀 155評論 0 5