溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL5.7傳統(tǒng)快速切換GTID方法

發(fā)布時(shí)間:2020-05-21 15:25:31 來(lái)源:網(wǎng)絡(luò) 閱讀:227 作者:三月 欄目:MySQL數(shù)據(jù)庫(kù)

本文主要給大家介紹MySQL5.7傳統(tǒng)快速切換GTID方法,文章內(nèi)容都是筆者用心摘選和編輯的,具有一定的針對(duì)性,對(duì)大家的參考意義還是比較大的,下面跟筆者一起了解下MySQL5.7傳統(tǒng)快速切換GTID方法吧。

當(dāng)前場(chǎng)景:

某些業(yè)務(wù)場(chǎng)景還未開啟GTID服務(wù)組,在最新版本中,BINLOG組提交也基于GTID方式,因此如何檢測(cè)是否符合開啟GTID條件,在線切換使用GTID,以及如何快速回滾:

gtid_mode參數(shù)新選項(xiàng):MySQL提供兩個(gè)額外的選項(xiàng)off_permissive和on_permissive

    gtid-mode的幾種狀態(tài)說(shuō)明:
        off :不產(chǎn)生gtid,基于binlog+position,slave也不能接受gtid的日志;
        off_permissive:不產(chǎn)生gtid,但做為slave可以識(shí)別gtid事務(wù)也可以識(shí)別非gtid事務(wù);
        on_permissive:產(chǎn)生gtid事務(wù),slave可以處理gtid事務(wù)和非gtid事務(wù);
        on:產(chǎn)生gtid事務(wù),slave只接受gtid事務(wù)

GTID三個(gè)限制

enforce-gtid-consistency=ON時(shí),以下三類語(yǔ)句時(shí)不支持的

  • CREATE TABLE ... SELECT statements

  • CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements inside transactions

  • Transactions or statements that update both transactional and nontransactional tables. There is an exception that nontransactional DML is allowed in the same transaction or in the same statement as transactional DML, if all nontransactional tables are temporary.

而實(shí)際上這個(gè)限制沒有必要這么嚴(yán)格,

  • CREATE TABLE ... SELECT statements

    對(duì)于binlog_format=row, gtid_next='automatic'時(shí)可以放開限制。
    生成的binlog包含兩個(gè)GTID, 一個(gè)是建表語(yǔ)句,一個(gè)是包含多個(gè)insert的事務(wù)。

  • 事務(wù)中包含事務(wù)表和非事務(wù)表

    對(duì)于gtid_next='automatic'時(shí)可以放開限制。
    生成的binlog包含兩個(gè)GTID, 一個(gè)是所有非事務(wù)表的,一個(gè)是所有事務(wù)表的。
    對(duì)update多表(包含事務(wù)表和非事務(wù)表)此時(shí)需額外要求binlog_format=row。   

在線開啟GTID過(guò)程如下:

① 所有的server上執(zhí)行

    set @@global.enforce_gtid_consistency = warn; 特別注意: 這一步是關(guān)建的一步使用不能出現(xiàn)警告。會(huì)將不符合的語(yǔ)句記入錯(cuò)誤日志

② 所有的server上執(zhí)行:

    set @@global.enforce_gtid_consistency = on;

③ 所有的Server上執(zhí)行(不關(guān)心最先最后,但要執(zhí)行完):

    set @@global.gtid_mode = off_permissive;

④ 所有的server上執(zhí)行: 

  set @@global.gtid_mode=on_permissive;

  實(shí)質(zhì)在這一步驟生成的日志都是帶GTID的日志了,這個(gè)步驟號(hào)稱是不關(guān)心任何節(jié)點(diǎn),但從實(shí)際管理上推薦在slave上先執(zhí)行,然后再去master上執(zhí)行。

⑤ 確認(rèn)傳統(tǒng)的binlog復(fù)制完畢,該值為0

  show status like 'ongoing_anonymous_transaction_count';

  所有節(jié)點(diǎn)進(jìn)行判斷 show status like 'ongoing_anonymous_transaction_count’; 為零

⑥ 所有的節(jié)點(diǎn)執(zhí)行: flush logs; 用于切換一下日志。  

⑦ 所有的節(jié)點(diǎn)啟用gtid_mode

    set @@global.gtid_mode=on;

⑧ 啟用Gtid的自動(dòng)查找節(jié)點(diǎn)復(fù)制:

    stop slave;

    change master to master_auto_position=1;

    start slave;

⑨ 把gtid_mode = on相關(guān)配置寫入配置文件

gtid_mode=on

enforce_gtid_consistency=on

最后可以看到傳統(tǒng)復(fù)制的一個(gè)變化,通過(guò)BINLOG觀察:

#171116 19:16:57 server id 2  end_log_pos 16188 CRC32 0x75584212 Anonymous_GTIDlast_committed=50sequence_number=51

#171116 19:17:03 server id 2  end_log_pos 16522 CRC32 0x3b42637e Anonymous_GTIDlast_committed=51sequence_number=52

#171116 19:19:54 server id 2  end_log_pos 16851 CRC32 0x08383e43 Anonymous_GTIDlast_committed=52sequence_number=53

#171116 19:19:59 server id 2  end_log_pos 17185 CRC32 0xd3445edc Anonymous_GTIDlast_committed=53sequence_number=54

#171116 19:21:06 server id 2  end_log_pos 17514 CRC32 0xcfd6ac97 Anonymous_GTIDlast_committed=54sequence_number=55

#171116 19:21:11 server id 2  end_log_pos 17802 CRC32 0xee11dc12 Anonymous_GTIDlast_committed=55sequence_number=56

GTID復(fù)制數(shù)據(jù):

#171117 13:40:00 server id 2  end_log_pos 456322 CRC32 0xf7074b53 GTIDlast_committed=1036sequence_number=1132

#171117 13:40:00 server id 2  end_log_pos 456725 CRC32 0xcb86f0b2 GTIDlast_committed=1036sequence_number=1133

#171117 13:40:00 server id 2  end_log_pos 457128 CRC32 0x8b14303e GTIDlast_committed=1036sequence_number=1134

#171117 13:40:00 server id 2  end_log_pos 457533 CRC32 0x4f492e18 GTIDlast_committed=1036sequence_number=1135

#171117 13:40:00 server id 2  end_log_pos 457940 CRC32 0xf0b078b6 GTIDlast_committed=1036sequence_number=1136

#####從GTID模式到傳統(tǒng)模式過(guò)程:

① 在SLAVE:

stop slave;

    mysql> show slave status\G;

    *************************** 1. row ***************************

                   Slave_IO_State: 

                      Master_Host: 192.168.1.130

                      Master_User: dlan

                      Master_Port: 3306

                    Connect_Retry: 60

                  Master_Log_File: mysql-bin.000010

              Read_Master_Log_Pos: 458282

               同時(shí)執(zhí)行:

    change master to master_auto_position=0,MASTER_LOG_FILE='mysql-bin.000010',MASTER_LOG_POS=458282;

    start slave;

②在MS上執(zhí)行:

SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;

③在MS上執(zhí)行

SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;

④在MS上執(zhí)行

SELECT @@GLOBAL.GTID_OWNED;  ##都為空就可以

⑤關(guān)閉GTID

SET @@GLOBAL.GTID_MODE = OFF;

最后觀察又GTID又是匿名:

#171117 14:32:38 server id 2  end_log_pos 319730 CRC32 0xc26f13a7 Anonymous_GTID last_committed=699sequence_number=793

#171117 14:32:38 server id 2  end_log_pos 320133 CRC32 0xf480c415 Anonymous_GTIDlast_committed=699sequence_number=794

#171117 14:32:38 server id 2  end_log_pos 320538 CRC32 0xa65ed8f1 Anonymous_GTIDlast_committed=699sequence_number=795

#171117 14:32:38 server id 2  end_log_pos 320945 CRC32 0xb7330b5e Anonymous_GTIDlast_committed=699sequence_number=796

#171117 14:32:38 server id 2  end_log_pos 321348 CRC32 0x619e04bb Anonymous_GTIDlast_committed=699sequence_number=797

#171117 14:32:38 server id 2  end_log_pos 321751 CRC32 0x250f903c Anonymous_GTIDlast_committed=699sequence_number=798

#171117 14:32:38 server id 2  end_log_pos 322156 CRC32 0x247a96f9 Anonymous_GTIDlast_committed=699sequence_number=799

看完以上關(guān)于MySQL5.7傳統(tǒng)快速切換GTID方法,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業(yè)知識(shí)信息 ,可以持續(xù)關(guān)注我們的行業(yè)資訊欄目的。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI