溫馨提示×

溫馨提示×

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

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

MySQL5.7新增加的特性gtid基礎介紹

發布時間:2020-05-14 16:55:30 來源:億速云 閱讀:378 作者:三月 欄目:建站服務器

下文主要給大家帶來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.7新增加的特性gtid基礎介紹

⑤: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基礎,大家是不是覺得非常有幫助。如果需要了解更多內容,請繼續關注我們的行業資訊,相信你會喜歡上這些內容的。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女