小編給大家分享一下MySQL如何在線開(kāi)啟/關(guān)閉GTID,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站主要從事成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)依蘭,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
MySQL DBA大都熟悉 MySQL 5.6版本開(kāi)始提供基于 GTID模式的主從復(fù)制,該特性簡(jiǎn)化復(fù)制和降低主從復(fù)制維護(hù)的難度,提高復(fù)制的可運(yùn)維性,不再依賴binlog文件名和文件中的位置。 但是它有很多限制,5.7版本MySQL支持對(duì)GTID做了如下改進(jìn):
a 不需要重啟MySQL服務(wù)器.
b 配置過(guò)程在線,整個(gè)復(fù)制集群仍然對(duì)外提供讀和寫的服務(wù).
c 不需要改變復(fù)制拓?fù)浣Y(jié)構(gòu).
d 可以在任何結(jié)構(gòu)的復(fù)制集群中在線啟用GTID功能.
在線修改GTID時(shí),必須按照如下順序
OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON
不能跳過(guò)其中環(huán)節(jié),比如gtid_mode 從off 不能直接變?yōu)閛n,否則MySQL會(huì)進(jìn)行提示。
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF <-> OFF_PERMISSIVE <-> ON_PERMISSIVE <-> ON. Also note that this value must be stepped up or down simultaneously on all servers. See the Manual for instructions.
在實(shí)踐online升級(jí)之前,我們需要了解MySQL 5.7版本的GTID_MODE 的含義:
OFF :不產(chǎn)生GTID,Slave只接受不帶GTID的事務(wù)
OFF_PERMISSIVE :不產(chǎn)生GTID,Slave即接受不帶GTID的事務(wù),也接受帶GTID的事務(wù)
ON_PERMISSIVE :產(chǎn)生GTID,Slave即接受不帶GTID的事務(wù),也接受帶GTID的事務(wù)
ON :產(chǎn)生GTID,Slave只能接受帶GTID的事務(wù)。
需要說(shuō)明的是只有數(shù)據(jù)庫(kù)版本是5.7.6以及之后的版本才能支持在線開(kāi)啟GTID. 在測(cè)試開(kāi)啟GTID的同時(shí)模擬主庫(kù)的讀寫壓測(cè):
sysbench --test=oltp.lua --oltp-tables-count=1 --oltp-table-size=500000 --mysql-db=sysbench --mysql-user=sysbench --mysql-password=sysbench --mysql-socket=/srv/my3316/run/mysql.sock --max-time=600 --num-threads=1 --oltp-test-mode=complex run
set global1.不支持非事務(wù)引擎。
2.不支持create table ... select 語(yǔ)句(在主庫(kù)執(zhí)行時(shí)直接報(bào)錯(cuò))。
3.不允許一個(gè)SQL同時(shí)更新一個(gè)事務(wù)引擎和非事務(wù)引擎的表。
4.不支持create temporary table和drop temporary語(yǔ)句。如果沒(méi)有任何warning 出現(xiàn),則在所有實(shí)例上執(zhí)行:
set global ENFORCE_GTID_CONSISTENCY = ON;
2.2 在主從復(fù)制結(jié)構(gòu)中所有實(shí)例中執(zhí)行:
set global GTID_MODE = OFF_PERMISSIVE;
讓主庫(kù)不產(chǎn)生GTID,Slave實(shí)例即接受不帶GTID的事務(wù),也接受帶GTID的事務(wù)。確保一定要在所有實(shí)例中執(zhí)行完該命令之后再執(zhí)行接下來(lái)的步驟。
2.3 在主從復(fù)制結(jié)構(gòu)中所有實(shí)例中執(zhí)行:
set global GTID_MODE = ON_PERMISSIVE;
主庫(kù)開(kāi)始產(chǎn)生GTID,Slave即接受不帶GTID的事務(wù),也接受帶GTID的事務(wù)。
2.4 在主從復(fù)制結(jié)構(gòu)中所有的實(shí)例中執(zhí)行:
在各個(gè)實(shí)例節(jié)點(diǎn)上執(zhí)行如下命令檢查匿名事務(wù)是否消耗完畢,最好多檢查幾次,以便確認(rèn)該參數(shù)的值是0.
[RW][TEST:3316]>SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
+-------------------------------------+-------+
| Variable_name | Value |
+-------------------------------------+-------+
| Ongoing_anonymous_transaction_count | 0 |
+-------------------------------------+-------+
1 row in set (0.00 sec)如果在從庫(kù)上檢查只需要一次滿足為0 即可。
2.5 確保第四步之前的binlog全部為應(yīng)用。
確保操作之前的所有binlog都已經(jīng)被其他服務(wù)器應(yīng)用了,因?yàn)槟涿腉TID必須確保已經(jīng)復(fù)制應(yīng)用成功,才可以進(jìn)行下一步操作。如何檢查呢? 其實(shí)最簡(jiǎn)單的方式是在從庫(kù)庫(kù)執(zhí)行show slave status檢查應(yīng)用位點(diǎn)的情況。如果追上了,則可以繼續(xù)。否則需要等待從庫(kù)應(yīng)用完binlog之后在進(jìn)行下一步。
2.5 在主從復(fù)制結(jié)構(gòu)中所有的實(shí)例中執(zhí)行:
set global GTID_MODE = ON;
該參數(shù)的功能是讓系統(tǒng)產(chǎn)生GTID ,Slave只能接受帶GTID的事務(wù)。
2.6 在從庫(kù)上執(zhí)行:
設(shè)置slave 復(fù)制中MASTER_AUTO_POSITION=1。
[RO][TEST:3316]>stop slave;
[RO][TEST:3316]>CHANGE MASTER TO MASTER_AUTO_POSITION = 1;
[RO][TEST:3316]>[RW][TEST:3316]>start slave;至此,將基于位點(diǎn)的復(fù)制關(guān)系升級(jí)為GTID模式。結(jié)束了嗎?還沒(méi)呢,記得修改my.cnf 添加
gtid_mode = on
enforce_gtid_consistency = on三 在線關(guān)閉GTID
關(guān)閉GTID的步驟其實(shí)和開(kāi)啟的步驟相反:
3.1 關(guān)閉slave 復(fù)制中的 MASTERAUTOPOSITION
[RO][TEST:3316]>stop slave;
[RO][TEST:3316]>CHANGE MASTER TO MASTER_LOG_FILE = file,
MASTER_LOG_POS = position MASTER_AUTO_POSITION = 0;
[RO][TEST:3316]>[RW][TEST:3316]>start slave;3.2 在所有的實(shí)例上執(zhí)行:
set global GTID_MODE = ON_PERMISSIVE;
3.3 在所有的實(shí)例上執(zhí)行:
set global GTID_MODE = OFF_PERMISSIVE;
3.4 等待 @@GLOBAL.GTID_OWNED 的值是一個(gè)空字符串為止。
SELECT @@GLOBAL.GTID_OWNED;
3.5 檢查master上的binlog中的日志都已經(jīng)被slave應(yīng)用完畢
3.6 在所有實(shí)例上設(shè)置GTID_MODE 為off
set global GTID_MODE = OFF;
3.7 在所有實(shí)例上執(zhí)行:
SET global GTID_MODE = OFF;
SET global ENFORCE_GTID_CONSISTENCY = OFF;
以上是“MySQL如何在線開(kāi)啟/關(guān)閉GTID”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當(dāng)前名稱:MySQL如何在線開(kāi)啟/關(guān)閉GTID
分享地址:http://vcdvsql.cn/article2/phoioc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、App開(kāi)發(fā)、外貿(mào)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、企業(yè)建站、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)