溫馨提示×

溫馨提示×

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

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

MySQL在做主從復(fù)制時(shí)如何使用GTID

發(fā)布時(shí)間:2020-04-23 11:44:03 來源:億速云 閱讀:297 作者:三月 欄目:MySQL數(shù)據(jù)庫

 本文主要給大家介紹MySQL在做主從復(fù)制時(shí)如何使用GTID,希望可以給大家補(bǔ)充和更新些知識,如有其它問題需要了解的可以持續(xù)在億速云行業(yè)資訊里面關(guān)注我的更新文章的。

 MySQL在5.6后多了一個(gè)新的功能就是在做主從復(fù)制時(shí)使用GTID,和傳統(tǒng)的使用relaylog中指定log_pos+log_file的主從復(fù)制相比,在使用GTID做主從復(fù)制時(shí)可以不指定slave需求讀取master中的哪一個(gè)binlog和偏移量。在傳統(tǒng)的MySQL主從復(fù)制中,一旦指定錯(cuò)誤master的偏移量后,那么就會(huì)造成主從不一致,而在基于GTID做的主從復(fù)制中就不會(huì)發(fā)生這樣的問題。GTID實(shí)際上是master提交了一次事務(wù)后而產(chǎn)生的ID,所以在配置的過程中一般都會(huì)開啟enforce_gtid_consistency(強(qiáng)制事務(wù)一致)的配置參數(shù)以確保GTID的安全,但是需要注意的是如果開啟了開啟enforce_gtid_consistency,那么在在事務(wù)中就不能創(chuàng)建和刪除臨時(shí)表,這一點(diǎn)需要注意,如創(chuàng)建臨時(shí)表:

MySQL在做主從復(fù)制時(shí)如何使用GTID

create temporary table
建議改成
create table

除此外還會(huì)開啟log_slave_updates,這個(gè)變量在master和slave中都會(huì)開啟,除此之外毋庸置疑的是一定需要開啟binlog,至于其它大體和log_pos+log_file的主從復(fù)制類似,在此就說以一下不一樣的地方,至于其它的以前有說過log_pos+log_file的主從復(fù)制需要的可以參看:http://jim123.blog.51cto.com/4763600/1862808,在master和slave中開啟GTID的相關(guān)變量,當(dāng)然如果是允許重啟的話先配置好二者my.cnf是更好的,其中二者的my.cnf的[mysqld]下都需要添加的是:

log_slave_updates = on
gtid_mode = on
enforce_gtid_consistency = on
在slave下建議開啟只讀:
read_only = on
relay_log_info_repository=TABLE
#把主從的信息記錄在表中,缺省是和舊版本中一樣是寫在文件中

master_info_repository=TABLE
#這一條寫在master上

其處,在配置的過程中最好把master的寫入關(guān)閉,開啟只讀:

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

在開啟相應(yīng)的變量參數(shù)后,在slave上做GTID的主從復(fù)制時(shí)使用master_auto_position會(huì)根據(jù)GTID找到log_pos+log_file,相比傳統(tǒng)的方式更為的方便

mysql> stop slave;
Query OK, 0 rows affected (0.08 sec)

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

mysql> change master to master_host='192.168.168.253',master_user='test_backup',master_password='test_backup',master_auto_position = 1;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

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

在開啟后可以查看GTID參數(shù)變量:

mysql> show global variables like '%GTID%';

當(dāng)然為了服務(wù)高可用,在使用GTID時(shí)MySQL也會(huì)開啟log_pos+log_file,只是我們就不需要想以前那樣手動(dòng)指向log_pos+log_file,因此使用GTID的方式做主從復(fù)制修復(fù)時(shí)還和以前不一樣:

mysql> stop slave;
Query OK, 0 rows affected (0.08 sec)

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

mysql> change master to master_host='192.168.168.253',master_user='test_backup',master_password='test_backup',master_log_file='mysql-bin.000014',master_log_pos=405051906;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

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

當(dāng)然這個(gè)是基于GTID和binlog結(jié)合的恢復(fù)方式,在選擇主從復(fù)制的方式只要選擇其中一中恢復(fù)即可,如果只是業(yè)務(wù)不繁忙的情況下僅有少量的或沒有事務(wù)時(shí)也可以嘗試著使用跳過事務(wù)的方式來解決錯(cuò)誤:

mysql> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
Query OK, 0 rows affected (0.01 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.01 sec)

此外需要注意的是在使用MySQL的GTID時(shí)是不支持GTID直接動(dòng)態(tài)關(guān)閉,如果需要關(guān)閉則需要使用GTID的4種狀態(tài):

ON:開啟
OFF:關(guān)閉
OFF_PERMISSIVE:關(guān)閉準(zhǔn)備
ON_PERMISSIVE:開啟準(zhǔn)備

正常的開啟和關(guān)閉流程是:OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON,即

SET GLOBAL gtid_mode = 'OFF_PERMISSIVE';
SET GLOBAL gtid_mode = 'ON_PERMISSIVE';
SET GLOBAL enforce_gtid_consistency = ON;#在開啟準(zhǔn)備的過程中開啟
SET GLOBAL gtid_mode = 'ON';

最后,需要注意的是在開啟GTID復(fù)制時(shí)多個(gè)線程僅會(huì)使用一個(gè)事務(wù),實(shí)際如果開啟多線程復(fù)制時(shí)還是多線程復(fù)制,只是在查看線程列表時(shí)顯示的是只有一個(gè)。

看了以上關(guān)于MySQL在做主從復(fù)制時(shí)如何使用GTID,希望能給大家在實(shí)際運(yùn)用中帶來一定的幫助。本文由于篇幅有限,難免會(huì)有不足和需要補(bǔ)充的地方,如有需要更加專業(yè)的解答,可在官網(wǎng)聯(lián)系我們的24小時(shí)售前售后,隨時(shí)幫您解答問題的。

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

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

AI