您好,登錄后才能下訂單哦!
下文主要給大家帶來MySQL5.7新增加的特性gtid基礎,希望這些內容能夠帶給大家實際用處,這也是我編輯MySQL5.7新增加的特性gtid基礎這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。
1、MySQL5.7 新特性:gtid復制
①:GTID是什么
是事務的ID,唯一識別號,全局唯一。
隨事務記錄到Binary Log中,用來標識事務。
每個事務有一個Gtid_log_event。
②:GTID的構成
UUID + Sequence Number
注意:Sequence Number是MySQL云服務器內部的一個事務順序號.一個MySQL云服務器上的事務不會有重復的順序號(保證云服務器內唯一)。
每個MySQL云服務器有一個全局唯一的UUID.
③:GTID的目的
簡化復制的使用過程和降低復制集群維護的難度:不再依賴Master的binlog文件名和文件中的位置。
由 CHANGE MASTER TO MASTER_LOG_FILE=‘Master-bin.000010’, MASTER_LOG_POS=‘214’; 改為:CHANGE MASTER TO AUTO_POSITION=1;
④:AUTO_POSITION的原理
*:MySQL Server 記錄了所有已經執行了的事務的GTID,包括復制過來的。
可用過系統變量Gtid_executed查看。
*:Slave記錄了所有從master接收過來的事務的GTID。
可通過Retrieve_gtid_set查看
*:Slave連接到Master時,會把gtid_executed中的gtid發給master. Master會自動跳過這些事務,只將沒有復制的事物發送到Slave去。
⑤:MySQL5.7GTID在線啟用GTID功能的優點
不需要重啟MySQL云服務器.
配置過程在線,整個復制集群仍然對外提供讀和寫的服務.
不需要改變復制拓撲結構.
可以在任何結構的復制集群中在線啟用GTID功能.
更簡單的搭建主從復制。
比傳統的復制更加安全。
GTID是連續的沒有空洞的,保證數據的一致性,零丟失。
⑥:GTID的開啟場景
新系統搭建時直接開啟GTID功能
老系統升級到MySQL5.7后開啟GTID功能
老系統開啟GTID的復雜性
復制集群中有的開啟了GTID,有的沒有開啟。
開啟前的BINLOG中的事務沒有GTID,開啟后的有GTID
GTID啟動過程中的模式:
全局系統變量GTID_MODE
OFF 不產生GTID, Slave只接受不帶GTID的事務
OFF_PERMISSIVE 不產生GTID, Slave即接受不帶GTID的事務也接受帶GTID的事務
ON_PERMISSIVE 產生GTID, Slave即接受不帶GTID的事務也接受帶GTID的事務
ON 產生GTID, Slave只接受帶GTID的事務
⑦:簡化的配置過程
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; (在每一個云服務器上設置)
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE; (在每一個云服務器上設置)
等一段時間, 讓不帶GTID的binlog events在所有的云服務器上執行完畢。
SET @@GLOBAL.GTID_MODE = ON; (在每一個云服務器上設置)
存儲GTID到表中的目的:
支持Slave不開啟Binlog的場景
有些Slave永遠不會被切換成Master.不開啟binlog,可以節省空間,提高性能。
MySQL5.6上GTID只能存儲在binlog中,所以必須開啟Binlog才能使用GTID功能。
MySQL5.7則不需要開啟binlog了。
如何記錄GTID到表中
如果開啟了binlog,在切換binlog時,將當前binlog的所有GTID插入gtid_executed表中。插入操作等價于一個或多個INSERT語句。
INSERT INTO mysql.gtid_executed(UUID, 1, 100)
如果沒有開啟binlog,每個事務在提交之前,會執行一個等價的INSERT的操作。此操作是該事務的一部分,和事務的其他操作整體保持原子性。
BEGIN;
…
INSERT INTO mysql.gtid_executed(UUID, 101, 101);
COMMIT;
gtid_executed表的壓縮:
壓縮前
+--------------------------------------+----------------+--------------+
| source_uuid | interval_start | interval_end |
+--------------------------------------+----------------+--------------+
| xxxxxxxx-4733-11e6-91fe-507b9d0eac6d | 1 | 1 |
+--------------------------------------+----------------+--------------+
| xxxxxxxx-4733-11e6-91fe-507b9d0eac6d | 2 | 2 |
+--------------------------------------+----------------+--------------+
| xxxxxxxx-4733-11e6-91fe-507b9d0eac6d | 3 | 3 |
+--------------------------------------+----------------+--------------+
壓縮后
+--------------------------------------+----------------+--------------+
| source_uuid | interval_start | interval_end |
+--------------------------------------+----------------+--------------+
| xxxxxxxx-4733-11e6-91fe-507b9d0eac6d | 1 | 3 |
+--------------------------------------+----------------+--------------+
控制壓縮頻率
mysql> SET GLOBAL gtid_executed_compression_period = N; (N – 事務的數量)
GTID的受限語句檢測:
GTID不支持的語句/事務:
CREATE TABLE … SELECT
事務中同時使用了支持事務和不支持事務的引擎。
BEGIN;
INSERT INTO innodb_tbl(…);
INSERT INTO myisam_tbl(…);
COMMIT;
在事務中使用CREATE/DROP TEMPORARY TABLE
BEGIN;
INSERT INTO innodb_tbl(…);
CREATE TEMPORARY TABLE temp1;
...
COMMIT;
啟用GTID前,檢測系統中是否有GTID不支持的語句/事務,提前處理。
全局系統變量enforce-gtid-consistency
OFF :不檢測是否有GTID不支持的語句/事務
WARN :當發現不支持的語句/事務時,返回警告,并在日志中記錄警告信息。
ON :當發現語句/事務不支持GTID時,返回錯誤。
+---------+------+---------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------+
| Warning | 1786 | Statement violates GTID consistency: CREATE TABLE ... SELECT. |
+---------+------+---------------------------------------------------------------+
在線上的數據庫云服務器或測試環境中,開啟WARN模式。
處理完GTID不支持的語句后,再啟用GTID。
對于以上關于MySQL5.7新增加的特性gtid基礎,大家是不是覺得非常有幫助。如果需要了解更多內容,請繼續關注我們的行業資訊,相信你會喜歡上這些內容的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。