久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL如何在線開啟/關閉GTID

204次閱讀
沒有評論

共計 3065 個字符,預計需要花費 8 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 MySQL 如何在線開啟 / 關閉 GTID,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一 前言

MySQL DBA 大都熟悉 MySQL 5.6 版本開始提供基于  GTID 模式的主從復制,該特性簡化復制和降低主從復制維護的難度,提高復制的可運維性,不再依賴 binlog 文件名和文件中的位置。但是它有很多限制,5.7 版本 MySQL 支持對 GTID 做了如下改進:

a 不需要重啟 MySQL 服務器.

b 配置過程在線,整個復制集群仍然對外提供讀和寫的服務.

c 不需要改變復制拓撲結構.

d 可以在任何結構的復制集群中在線啟用 GTID 功能.

在線修改 GTID 時,必須按照如下順序  

OFF  -  OFF_PERMISSIVE  -  ON_PERMISSIVE  -  ON

不能跳過其中環節,比如 gtid_mode 從 off 不能直接變為 on,否則 MySQL 會進行提示。

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.

在實踐 online 升級之前,我們需要了解 MySQL 5.7 版本的 GTID_MODE 的含義:

OFF            : 不產生 GTID,Slave 只接受不帶 GTID 的事務 
OFF_PERMISSIVE : 不產生 GTID,Slave 即接受不帶 GTID 的事務, 也接受帶 GTID 的事務
ON_PERMISSIVE  : 產生 GTID,Slave 即接受不帶 GTID 的事務, 也接受帶 GTID 的事務
ON             : 產生 GTID,Slave 只能接受帶 GTID 的事務。

二 在線開啟 GTID

需要說明的是只有數據庫版本是 5.7.6 以及之后的版本才能支持在線開啟 GTID. 在測試開啟 GTID 的同時模擬主庫的讀寫壓測:

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

2.1 在主從復制結構中所有的實例中執行

set global1. 不支持非事務引擎。
2. 不支持 create table … select 語句 (在主庫執行時直接報錯)。
3. 不允許一個 SQL 同時更新一個事務引擎和非事務引擎的表。
4. 不支持 create temporary table 和 drop temporary 語句。

如果沒有任何 warning 出現,則在所有實例上執行:

set global ENFORCE_GTID_CONSISTENCY = ON;

2.2 在主從復制結構中所有實例中執行:

set global GTID_MODE = OFF_PERMISSIVE;

讓主庫不產生 GTID,Slave 實例即接受不帶 GTID 的事務, 也接受帶 GTID 的事務。確保一定要在所有實例中執行完該命令之后再執行接下來的步驟。

2.3 在主從復制結構中所有實例中執行:

set global GTID_MODE = ON_PERMISSIVE;

主庫開始產生 GTID,Slave 即接受不帶 GTID 的事務, 也接受帶 GTID 的事務。

2.4 在主從復制結構中所有的實例中執行:

在各個實例節點上執行如下命令檢查匿名事務是否消耗完畢,最好多檢查幾次,以便確認該參數的值是 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)

如果在從庫上檢查只需要一次滿足為 0 即可。

2.5 確保第四步之前的 binlog 全部為應用。

確保操作之前的所有 binlog 都已經被其他服務器應用了,因為匿名的 GTID 必須確保已經復制應用成功,才可以進行下一步操作。如何檢查呢?其實最簡單的方式是在從庫庫執行 show slave status 檢查應用位點的情況。如果追上了,則可以繼續。否則需要等待從庫應用完 binlog 之后在進行下一步。

2.5 在主從復制結構中所有的實例中執行:

set global GTID_MODE = ON;

該參數的功能是讓系統產生 GTID ,Slave 只能接受帶 GTID 的事務。

2.6 在從庫上執行:

設置 slave 復制中 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;

至此,將基于位點的復制關系升級為 GTID 模式。結束了嗎?還沒呢,記得修改 my.cnf 添加

gtid_mode = on
enforce_gtid_consistency = on

三 在線關閉 GTID

關閉 GTID 的步驟其實和開啟的步驟相反:

3.1 關閉 slave 復制中的 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 在所有的實例上執行:

set global GTID_MODE = ON_PERMISSIVE;

3.3 在所有的實例上執行:

set global GTID_MODE = OFF_PERMISSIVE;

3.4 等待 @@GLOBAL.GTID_OWNED 的值是一個空字符串為止。

SELECT @@GLOBAL.GTID_OWNED;

3.5 檢查 master 上的 binlog 中的日志都已經被 slave 應用完畢 3.6 在所有實例上設置 GTID_MODE 為 off

set global GTID_MODE = OFF;

3.7 在所有實例上執行:

SET global GTID_MODE = OFF;

SET global ENFORCE_GTID_CONSISTENCY = OFF;

以上是“MySQL 如何在線開啟 / 關閉 GTID”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-26發表,共計3065字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 孝感市| 沈阳市| 彝良县| 高台县| 仁怀市| 安顺市| 长寿区| 潼南县| 天门市| 旌德县| 林甸县| 从江县| 鲁甸县| 巴楚县| 即墨市| 通榆县| 武陟县| 临桂县| 黄骅市| 南通市| 衡山县| 襄垣县| 溧阳市| 沂南县| 建水县| 聂荣县| 巴南区| 古蔺县| 田东县| 平远县| 资溪县| 婺源县| 呼和浩特市| 砀山县| 阿尔山市| 鄯善县| 洛宁县| 汉沽区| 青川县| 保德县| 常宁市|