本文主要給大家介紹MySQL在做主從復制時如何使用GTID,希望可以給大家補充和更新些知識,如有其它問題需要了解的可以持續(xù)在創(chuàng)新互聯行業(yè)資訊里面關注我的更新文章的。
成都創(chuàng)新互聯公司主營黃石港網站建設的網絡公司,主營網站建設方案,重慶APP開發(fā)公司,黃石港h5重慶小程序開發(fā)搭建,黃石港網站營銷推廣歡迎黃石港等地區(qū)企業(yè)咨詢MySQL在5.6后多了一個新的功能就是在做主從復制時使用GTID,和傳統(tǒng)的使用relaylog中指定log_pos+log_file的主從復制相比,在使用GTID做主從復制時可以不指定slave需求讀取master中的哪一個binlog和偏移量。在傳統(tǒng)的MySQL主從復制中,一旦指定錯誤master的偏移量后,那么就會造成主從不一致,而在基于GTID做的主從復制中就不會發(fā)生這樣的問題。GTID實際上是master提交了一次事務后而產生的ID,所以在配置的過程中一般都會開啟enforce_gtid_consistency(強制事務一致)的配置參數以確保GTID的安全,但是需要注意的是如果開啟了開啟enforce_gtid_consistency,那么在在事務中就不能創(chuàng)建和刪除臨時表,這一點需要注意,如創(chuàng)建臨時表:
create temporary table 建議改成 create table除此外還會開啟log_slave_updates,這個變量在master和slave中都會開啟,除此之外毋庸置疑的是一定需要開啟binlog,至于其它大體和log_pos+log_file的主從復制類似,在此就說以一下不一樣的地方,至于其它的以前有說過log_pos+log_file的主從復制需要的可以參看:http://jim123.blog.51cto.com/4763600/1862808,在master和slave中開啟GTID的相關變量,當然如果是允許重啟的話先配置好二者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的寫入關閉,開啟只讀:
mysql> set global read_only = ON; Query OK, 0 rows affected (0.00 sec)在開啟相應的變量參數后,在slave上做GTID的主從復制時使用master_auto_position會根據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參數變量:
mysql> show global variables like '%GTID%';當然為了服務高可用,在使用GTID時MySQL也會開啟log_pos+log_file,只是我們就不需要想以前那樣手動指向log_pos+log_file,因此使用GTID的方式做主從復制修復時還和以前不一樣:
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)當然這個是基于GTID和binlog結合的恢復方式,在選擇主從復制的方式只要選擇其中一中恢復即可,如果只是業(yè)務不繁忙的情況下僅有少量的或沒有事務時也可以嘗試著使用跳過事務的方式來解決錯誤:
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時是不支持GTID直接動態(tài)關閉,如果需要關閉則需要使用GTID的4種狀態(tài):
ON:開啟 OFF:關閉 OFF_PERMISSIVE:關閉準備 ON_PERMISSIVE:開啟準備正常的開啟和關閉流程是:OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON,即
SET GLOBAL gtid_mode = 'OFF_PERMISSIVE'; SET GLOBAL gtid_mode = 'ON_PERMISSIVE'; SET GLOBAL enforce_gtid_consistency = ON;#在開啟準備的過程中開啟 SET GLOBAL gtid_mode = 'ON';最后,需要注意的是在開啟GTID復制時多個線程僅會使用一個事務,實際如果開啟多線程復制時還是多線程復制,只是在查看線程列表時顯示的是只有一個。
看了以上關于MySQL在做主從復制時如何使用GTID,希望能給大家在實際運用中帶來一定的幫助。本文由于篇幅有限,難免會有不足和需要補充的地方,如有需要更加專業(yè)的解答,可在官網聯系我們的24小時售前售后,隨時幫您解答問題的。
另外有需要云服務器可以了解下創(chuàng)新互聯cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。