成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL數(shù)據(jù)庫主從技術(shù)GTID大揭秘

數(shù)據(jù)庫 MySQL
GTID(全局事務(wù)標識符)是mysql MySQL-5.6.5開始支持的新特性之一,全局事務(wù)標識符不僅在源(主)服務(wù)器上是唯一的,而且在給定復制設(shè)置中的所有服務(wù)器都是唯一的。

一、概述

[[400337]]

1.1 GTID的概念

GTID(全局事務(wù)標識符)是mysql MySQL-5.6.5開始支持的新特性之一,全局事務(wù)標識符不僅在源(主)服務(wù)器上是唯一的,而且在給定復制設(shè)置中的所有服務(wù)器都是唯一的。正因為這樣一個特性使得mysql的主從復制變得更加簡單且一致性更高。它與源(主)服務(wù)器上提交的每個事務(wù)相關(guān)聯(lián),由服務(wù)器ID+事務(wù)ID組合而成。

GTID = source_id:transaction_id,中間由“:”分隔,source_id用于標識原服務(wù)器,通常指server_uuid,由于GTID會傳遞到slave,所以也可以理解為源ID。transaction_id為當前服務(wù)器上已提交事務(wù)的一個序列號,通常從1開始自增長的序列,一個數(shù)值對應一個事務(wù)。

查看本機的server_uuid方法如下:

  1. mysql> show variables like '%uuid%'
  2. +---------------+--------------------------------------+ 
  3. | Variable_name | Value                                | 
  4. +---------------+--------------------------------------+ 
  5. | server_uuid   | f3d0a8b5-a657-11eb-a6e5-000c29dbd935 | 
  6. +---------------+--------------------------------------+ 
  7. 1 row in set (0.01 sec) 

 1.2 GTID的工作原理

1、當一個事務(wù)在主庫端執(zhí)行并提交時,會產(chǎn)生一個GTID并記錄到binlog日志中。

2、binlog傳輸?shù)絪lave,并存儲到slave的relaylog后,讀取這個GTID的這個值設(shè)置gtid_next變量,即告訴Slave,下一個要執(zhí)行的GTID值。

3、sql線程從relay log中獲取GTID,然后對比slave端的binlog是否有該GTID,如果有說明該GTID的事務(wù)已經(jīng)執(zhí)行,slave會忽略。如果沒有記錄,slave會執(zhí)行該GTID的事務(wù),在執(zhí)行前會檢查其他session持有該GTID,確保該GTID的事務(wù)不會被重復執(zhí)行,并記錄該GTID到自身的binlog。

4、在解析過程中會判斷是否有主鍵,如果沒有就用二級索引,再沒有就走全表掃描。

1.3 mysql.gtid_exected表

GTID存儲在mysql的 gtid_executed的表中。該表供mysql服務(wù)器內(nèi)部使用,該表中的一行代表的每個GTID或GTID集合,以及該集合的開始和結(jié)束事務(wù)ID;對于僅引用單個GTID的行,最后兩個值相同。

在mysql.gtid_executed安裝或升級MySQL Server時,使用create table 類似于以下所示的語句創(chuàng)建該表(如果尚不存在):

  1. CREATE TABLE gtid_executed ( 
  2.     source_uuid CHAR(36) NOT NULL
  3.     interval_start BIGINT(20) NOT NULL
  4.     interval_end BIGINT(20) NOT NULL
  5.     PRIMARY KEY (source_uuid, interval_start) 

 注意:與其他MySQL系統(tǒng)表一樣,請勿嘗試自己創(chuàng)建或修改該表。

GTID僅當gtid_mode is ON or ON_PERMISSIVE時,GTID才會存儲在gtid_executed的表中,GTID的存儲與mysql是否啟用二進制日志緊密相關(guān)。

  • 如果禁用了二進制日志記錄(log_binis OFF),或者如果 log_slave_updates禁用了二進制日志記錄,則服務(wù)器將屬于每個事務(wù)的GTID與該事務(wù)一起存儲在表中。此外,該表會以用戶可配置的速率定期壓縮。這種情況僅適用于禁用了二進制日志記錄或副本更新日志記錄的副本。它不適用于復制源服務(wù)器,因為必須在源上啟用二進制日志記錄才能進行復制。
  • 如果啟用了二進制日志記錄(log_bin是 ON),則每當旋轉(zhuǎn)二進制日志或關(guān)閉服務(wù)器時,服務(wù)器都會將寫入前一個二進制日志的所有事務(wù)的GTID寫入mysql.gtid_executed表中。這種情況適用于復制源服務(wù)器或啟用了二進制日志記錄的副本。
  • 如果服務(wù)器意外停止,則當前二進制日志文件中的GTID集不會保存在 mysql.gtid_executed表中。恢復期間,這些GTID從二進制日志文件添加到表中。例外的是重新啟動服務(wù)器時未啟用二進制日志記錄。在這種情況下,服務(wù)器無法訪問二進制日志文件以恢復GTID,因此無法啟動復制。

啟用二進制日志記錄后,該 mysql.gtid_executed表將不保存所有已執(zhí)行事務(wù)的GTID的完整記錄。該信息由gtid_executed系統(tǒng)變量的全局值提供 。始終使用 @@GLOBAL.gtid_executed,它在每次提交后都會更新,以表示MySQL服務(wù)器的GTID狀態(tài),而不查詢 mysql.gtid_executed表。

1.4 mysql.gtid_executed表壓縮

隨著時間的流逝, mysql.gtid_executed表中可能會出現(xiàn)很多行,表會越來越大,為了節(jié)省空間,MySQL服務(wù)器mysql.gtid_executed通過用橫跨事務(wù)標識符整個間隔的一行替換每行這樣的行來定期壓縮 表,如下所示:

  1. +--------------------------------------+----------------+--------------+ 
  2. | source_uuid                          | interval_start | interval_end | 
  3. |--------------------------------------+----------------+--------------| 
  4. | 3E11FA47-71CA-11E1-9E33-C80AA9429562 | 37             | 43           | 
  5. ... 

 您可以通過設(shè)置

gtid_executed_compression_period 系統(tǒng)變量來控制壓縮速率,此變量的默認值為1000,這意味著默認情況下,每1000個事務(wù)處理后將對表進行壓縮。設(shè)置 gtid_executed_compression_period 為0根本無法執(zhí)行壓縮,gtid_executed如果您這樣做,應該準備增加表可能需要的磁盤空間量 。

該mysql.gtid_executed表的壓縮由名為的專用前臺線程執(zhí)行

thread/sql/compress_gtid_table。該線程未在的輸出中列出SHOW PROCESSLIST,但可以在threads表中的一行中查看 ,如下所示:

  1. mysql> SELECT * FROM performance_schema.threads WHERE NAME LIKE '%gtid%'\G 
  2.      RESOURCE_GROUP: SYS_default 
  3. *************************** 2. row *************************** 
  4.           THREAD_ID: 45 
  5.                NAME: thread/sql/compress_gtid_table 
  6.                TYPE: FOREGROUND 
  7.      PROCESSLIST_ID: 6 
  8.    PROCESSLIST_USER: NULL 
  9.    PROCESSLIST_HOST: NULL 
  10.      PROCESSLIST_DB: NULL 
  11. PROCESSLIST_COMMAND: Daemon 
  12.    PROCESSLIST_TIME: 8757 
  13.   PROCESSLIST_STATE: Suspending 
  14.    PROCESSLIST_INFO: NULL 
  15.    PARENT_THREAD_ID: 1 
  16.                ROLE: NULL 
  17.        INSTRUMENTED: YES 
  18.             HISTORY: YES 
  19.     CONNECTION_TYPE: NULL 
  20.        THREAD_OS_ID: 7602 
  21.      RESOURCE_GROUP: SYS_default 
  22. rows in set (0.01 sec) 

 二、GTID復制的優(yōu)缺點

2.1 GTID優(yōu)勢

1、更簡單的實現(xiàn)failover,不用以前那樣在需要找log_file和log_pos。 2、更簡單的搭建主從復制。 3、比傳統(tǒng)的復制更加安全。 4、GTID是連續(xù)的沒有空洞的,保證數(shù)據(jù)的一致性,零丟失。

2.2 GTID的限制

1、不允許在同一個事務(wù)內(nèi)對事務(wù)表和非事務(wù)進行DML操作,例如在同一個事務(wù)內(nèi)先update innodb表,然后update myisam表。因為GTID強制每一個GTID對應一個事務(wù),而在同一個事務(wù)內(nèi)既操作innodb表又操作myisam,就會產(chǎn)生兩個GTID; 2、不允許CREATE TABLE … SELECT語句,首先這種語句對于statement格式的binlog是不安全的;而對于row格式的binlog,這種語句在binlog實際是分成兩個event進行記錄的,一個記錄create創(chuàng)建操作,一個記錄insert操作,那么就有可能這兩個操作是對應到同一個GTID上,而當將這兩個擁有相同GTID的event傳到從庫時,從庫就會忽略擁有相同GTID的insert操作,造成數(shù)據(jù)丟失; 3、CREATE TEMPORARY TABLE和DROP TEMPORARY TABLE不允許在事務(wù)內(nèi)執(zhí)行,只有在事務(wù)以外并且autocommit=1才能正常執(zhí)行; 4、不支持sql_slave_skip_counter,如果需要跳過事務(wù),可以用以下方法:

  1. set @@session.gtid_next='需要跳過的事務(wù)gtid' 
  2. begin;commit
  3. set session gtid_next=automatic; 

 【編輯推薦】

 

責任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2014-02-14 09:22:36

AWSOracle云數(shù)據(jù)庫

2011-04-14 11:09:14

MySQL數(shù)據(jù)庫

2019-06-20 15:25:14

MySQLL數(shù)據(jù)庫存儲

2017-08-24 09:19:20

分解技術(shù)揭秘

2023-01-11 08:00:00

MySQLGTID雙主模式

2012-06-11 18:07:03

2011-08-29 14:00:26

MySQL主從延時

2025-06-13 09:33:45

2010-06-09 15:01:18

MySQL數(shù)據(jù)庫同步

2019-11-08 07:27:34

網(wǎng)絡(luò)網(wǎng)絡(luò)體檢網(wǎng)絡(luò)技術(shù)

2017-01-17 15:14:49

MySQL數(shù)據(jù)庫自動化

2019-11-07 22:12:50

網(wǎng)絡(luò)網(wǎng)絡(luò)體檢網(wǎng)絡(luò)技術(shù)

2019-10-31 08:50:25

網(wǎng)絡(luò)網(wǎng)絡(luò)體檢網(wǎng)絡(luò)技術(shù)

2021-09-24 18:14:02

華為云GaussDB

2019-08-27 15:00:09

MySQL數(shù)據(jù)庫存儲

2019-12-09 12:39:58

數(shù)據(jù)庫技術(shù)機器學習

2023-10-06 13:52:40

數(shù)據(jù)庫模型

2024-07-15 09:14:03

MySQL主從復制

2024-10-21 08:21:12

數(shù)據(jù)庫主從延遲

2010-08-04 10:32:56

Flex連接數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日日夜夜天天 | 天天操夜夜拍 | 精品久久久久国产 | 中文字幕欧美一区 | 亚洲一区二区久久 | 亚洲一区二区 | 亚洲视频在线一区 | 亚洲视频观看 | 国产精品高清一区二区三区 | 在线2区| 午夜不卡福利视频 | 欧美a在线看 | 久久久久久国产精品 | 欧美激情一区二区 | 91精品久久久久久久 | 久久精品亚洲 | 在线观看成年视频 | 亚洲精品久久视频 | 国产一区二区三区四区 | 国产成人一区在线 | 中文字幕亚洲在线 | 天天久久 | 亚洲视频在线免费观看 | 美国一级黄色片 | av手机免费在线观看 | 亚洲精品电影网在线观看 | 久久国产美女视频 | 日本福利片 | 91偷拍精品一区二区三区 | heyzo在线 | 一区二区免费看 | 青青草视频网站 | 日本精品一区二区 | 日韩精品免费在线观看 | h视频在线免费观看 | 91精品国模一区二区三区 | 亚洲高清av在线 | 欧美区精品 | 激情毛片 | 高清人人天天夜夜曰狠狠狠狠 | 亚洲图片一区二区三区 |