這篇文章主要介紹“GTID的基本知識有哪些”,在日常操作中,相信很多人在GTID的基本知識有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”GTID的基本知識有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

太仆寺網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
一、GTID的基本知識
GTID的概念:
在源(主)服務(wù)器上提交的每個事務(wù),將創(chuàng)建和其相關(guān)聯(lián)的唯一標(biāo)識符的全局事物標(biāo)識符。
此標(biāo)識符不但是唯一的,而且在所有的復(fù)制從庫中都是唯一的。所有事物和所有GTID之間都有一對一的映射關(guān)系。
GTID的基本描述:
GTID表示為一對坐標(biāo),用冒號(:)分隔,如下所示:
GTID = source_id:transaction_id。
source_id標(biāo)識源服務(wù)器。通常,服務(wù)器的server_uuid用于此目的。
transaction_id是一個序列號,由該服務(wù)器上的事務(wù)提交順序決定;
例如,要提交的第一個事務(wù)具有1作為其transaction_id,并且要在同一源務(wù)器上提交的第十個事務(wù)被分配了10作為transaction_id。
一個事務(wù)在一個GTID中不能有0作為序列號。
例如,原來在server_uuid等于3E11FA47-71CA-11E1-9E33-C80AA9429562服務(wù)器上提交的第二十三個事務(wù)具有這個GTID:
3E11FA47-71CA-11E1-9E33-C80AA9429562:23
這種格式用于表示語句的輸出中的GTID,例如SHOW SLAVE STATUS以及二進(jìn)制日志
可以使用語句來查看UUID
show variables like '%UUID%';
正如在SHOW MASTER STATUS或SHOW SLAVE STATUS等語句的輸出中所寫的,源自同一服務(wù)器的GTID序列可能會被合并為單個表達(dá)式,如下所示:
3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5
上面顯示的示例表示源自MySQL服務(wù)器的第一個到第五個事務(wù),其server_uuid是3E11FA47-71CA-11E1-9E33-C80AA9429562。
該格式也用于提供START SLAVE選項SQL_BEFORE_GTIDS和SQL_AFTER_GTIDS所需的參數(shù)。
GTID集以幾種方式在MySQL服務(wù)器中使用。例如,由gtid_executed和gtid_purged系統(tǒng)變量存儲的值表示為GTID集合。
另外,函數(shù)GTID_SUBSET()和GTID_SUBTRACT()需要GTID集作為輸入。當(dāng)從庫變量返回GTID集合時,UUID按字母順序排列,數(shù)字區(qū)間按照升序排列。
GTID總是保存在主從之間。這意味著可以通過檢查二進(jìn)制日志來確定應(yīng)用于任何從庫的任何事務(wù)的來源。 另外,一旦給定GTID的事務(wù)在給定的服務(wù)器上被提交,任何具有相同GTID的后續(xù)事務(wù)都被該服務(wù)器忽略。因此,在主站上提交的事務(wù)不能在從站上應(yīng)用一次,這有助于保證一致性。
當(dāng)使用GTID時,從庫不需要任何非本地數(shù)據(jù),例如主庫上文件的名稱和該文件中的位置。所有用于與主庫同步的必要信息都直接從復(fù)制數(shù)據(jù)流中獲取。 GTID替換之前所需的文件偏移對,以確定在主庫和從庫之間啟動,停止或恢復(fù)數(shù)據(jù)流的點。因此,在CHANGE MASTER TO語句中不要包含MASTER_LOG_FILE或MASTER_LOG_POS選項,該語句用于引導(dǎo)從庫從給定主庫復(fù)制;相反,開啟gtid之后,只需要啟用MASTER_AUTO_POSITION選項。有關(guān)使用基于GTID的復(fù)制配置和啟動主庫和從、庫所需的確切步驟。GTID的生成和生命周期由以下步驟組成:
1)事務(wù)在主服務(wù)器上執(zhí)行并提交。
使用主庫的UUID和此庫上尚未使用的最小非零事務(wù)序列號為該事務(wù)分配一個GTID; GTID被寫入到master的二進(jìn)制日志中(直接在日志中的事務(wù)本身之前)。
2)二進(jìn)制日志數(shù)據(jù)傳輸?shù)綇膸觳⒋鎯υ趶膸斓闹欣^日志中,從庫讀取GTID并將其gtid_next系統(tǒng)變量的值設(shè)置為此GTID。這告訴備庫,下一個事務(wù)必須使用這個GTID記錄。需要注意的是,slave在會話上下文中設(shè)置gtid_next。
3)從庫驗證這個GTID是否已經(jīng)被用來在自己的二進(jìn)制日志中記錄事務(wù)。 如果這個GTID沒有被使用,那么從設(shè)備寫入GTID,應(yīng)用事務(wù)并將事務(wù)寫入其二進(jìn)制日志。
通過首先讀取和檢查事務(wù)的GTID,在處理事務(wù)本身之前,從庫不僅保證在從庫上沒有應(yīng)用具有此GTID的先前事務(wù),而且還確保沒有其他會話已經(jīng)讀取了該GTID但尚未提交相關(guān)的交易。換句話說,多個客戶端不允許同時應(yīng)用相同的事務(wù)。
4)因為gtid_next不為空,所以從庫不會為這個事務(wù)生成一個GTID,而是把存儲在這個變量中的GTID,也就是從它的二進(jìn)制日志中事務(wù)之前立即從主機(jī)獲得的GTID寫入。
mysql.gtid_executed表
從MySQL 5.7.5開始,GTID被存儲在mysql數(shù)據(jù)庫中名為gtid_executed的表中。
對于每個GTID或其代表的一組GTID,該表中的一行包含源服務(wù)器的UUID以及該組的起始和結(jié)束事務(wù)ID; 對于僅引用單個GTID的行,這兩個值是相同的。
當(dāng)安裝或升級MySQL服務(wù)器時,會使用CREATE TABLE語句創(chuàng)建mysql.gtid_executed表(如果它尚不存在)
WARNING:與其他MySQL系統(tǒng)表一樣,不要試圖自己創(chuàng)建或修改這個表。
mysql.gtid_executed表允許在從庫上禁用二進(jìn)制日志記錄時使用GTID,并且在二進(jìn)制日志丟失時保留GTID歷史記錄。
只有當(dāng)gtid_mode為ON或ON_PERMISSIVE時,GTID才存儲在mysql.gtid_executed表中。GTID的存儲點取決于是否啟用二進(jìn)制日志記錄:
1)如果禁用二進(jìn)制日志記錄(log_bin為OFF),或者如果log_slave_updates被禁用,則服務(wù)器將屬于每個事務(wù)的GTID與事務(wù)一起存儲在表中。
另外,表以用戶可配置的速率周期性壓縮;這種情況只適用于禁用二進(jìn)制日志記錄或從庫更新日志記錄的復(fù)制從庫。
它不適用于復(fù)制主庫,因為在主庫上,必須啟用二進(jìn)制日志記錄才能進(jìn)行復(fù)制。
2)如果啟用了二進(jìn)制日志記錄(log_bin為ON),則無論何時二進(jìn)制日志被輪換或服務(wù)器關(guān)閉,服務(wù)器都將寫入前一個二進(jìn)制日志的所有事務(wù)的GTID寫入mysql.gtid_executed表。
這種情況適用于啟用二進(jìn)制日志記錄的復(fù)制主節(jié)點或復(fù)制從節(jié)點。
在服務(wù)器意外停止的情況下,當(dāng)前二進(jìn)制日志中的GTID集不會保存在mysql.gtid_executed表中。在這種情況下,這些GTID將在恢復(fù)過程中添加到表中,并添加到gtid_executed系統(tǒng)變量中的一組GTID中。
啟用二進(jìn)制日志記錄時,mysql.gtid_executed表不會為所有已執(zhí)行的事務(wù)提供完整的GTID記錄。該信息由gtid_executed系統(tǒng)變量的全局值提供。
mysql.gtid_executed表由RESET MASTER歸零。
mysql.gtid_executed表壓縮
隨著時間的推移,mysql.gtid_executed表可能會被許多行填充,這些行涉及到來自同一臺服務(wù)器的單個GTID,并且其事務(wù)ID構(gòu)成一個序列
如果通過用跨越事務(wù)標(biāo)識符的整個間隔的單個行替換每個這樣的行集合來周期性地壓縮該表格,則可以節(jié)省相當(dāng)大的空間
啟用GTID時,服務(wù)器會定期在mysql.gtid_executed表上執(zhí)行這種類型的壓縮。您可以通過設(shè)置execution_gtids_compression_period系統(tǒng)變量來控制在表壓縮之前允許經(jīng)過的事務(wù)數(shù),從而控制壓縮率。
這個變量的默認(rèn)值是1000; 這意味著,默認(rèn)情況下,表格的壓縮在每1000個事務(wù)之后執(zhí)行。將execution_gtid_compression_period設(shè)置為0將阻止完全執(zhí)行壓縮; 但是,如果執(zhí)行此操作,則應(yīng)該為gtid_executed表可能需要的磁盤空間大量增加做好準(zhǔn)備。
對mysql.gtid_executed表的壓縮由名為thread/sql/compress_gtid_table的專用前臺線程執(zhí)行。此線程未在SHOW PROCESSLIST的輸出中列出,但可以在線程表中查看該行,如下所示:
SELECT * FROM performance_schema.threads WHERE NAME LIKE '%gtid%'\G
thread/sql/compress_gtid_table線程通常會休眠,直到execution_gtids_compression_period事務(wù)被執(zhí)行,然后喚醒以執(zhí)行前面所述的對mysql.gtid_executed表的壓縮。 然后休眠,直到另一個execution_gtids_compression_period事務(wù)發(fā)生,然后醒來再次執(zhí)行壓縮,無限期地重復(fù)這個循環(huán)。 禁用二進(jìn)制日志記錄時將此值設(shè)置為0意味著線程始終處于睡眠狀態(tài),永遠(yuǎn)不會喚醒。
普通復(fù)制模式切換為gtid模式,在5.6環(huán)境只能冷操作,5.7環(huán)境可在線操作
二.1、在主從復(fù)制中使用GTID(5.6環(huán)境冷操作)
最簡單的GTID復(fù)制拓?fù)涞膯舆^程中的關(guān)鍵步驟(由一個主庫和一個從庫組成)如下所示:
1)如果復(fù)制已經(jīng)在運(yùn)行,則通過將它們設(shè)置為只讀來同步這兩個服務(wù)器。
2)停止兩臺服務(wù)器。
3)重新啟動兩臺服務(wù)器并啟用GTID并配置正確的選項。
4)指示從服務(wù)器使用主服務(wù)器作為復(fù)制數(shù)據(jù)源并使用自動定位。完成這一步所需的SQL語句在本節(jié)后面的例子中描述。
5)采取新的備份。包含沒有GTID的交易的二進(jìn)制日志不能在啟用了GTID的服務(wù)器上使用,因此在此點之前進(jìn)行的備份不能用于新配置。
6)啟動從服務(wù)器,然后在兩臺服務(wù)器上再次禁用只讀模式,以便他們可以接受更新。
具體過程:
1,主庫設(shè)置為read_only,使從庫追上主庫
2,主從都關(guān)閉MySQL服務(wù)
3,主從都在my.cnf文件中配置gtid的啟動參數(shù)
gtid_mode=ON
enforce-gtid-consistency=true
4,從庫使用skip-slave-start啟動MySQL服務(wù)
從庫使用MASTER_AUTO_POSITION = 1。配置主從
CHANGE MASTER TO
MASTER_HOST = 'host',
MASTER_PORT = port,
MASTER_USER = 'user',
MASTER_PASSWORD = 'password',
MASTER_AUTO_POSITION = 1;
MASTER_LOG_FILE選項和MASTER_LOG_POS選項都不能與MASTER_AUTO_POSITION設(shè)置為1一起使用
5,采取gtid之后,需要做一個新的備份,因為開啟gtid之前做的備份不可用了
例如,您可以在執(zhí)行備份的服務(wù)器上執(zhí)行FLUSH LOGS。 然后,明確地進(jìn)行備份,或者等待您可能已經(jīng)設(shè)置的任何定期備份例程的下一次迭代。
6,從庫開啟主從
主庫關(guān)閉
Using GTIDs for Failover and Scaleout
將全局事務(wù)標(biāo)識符(GTID)用于MySQL復(fù)制時,有許多技術(shù)用于配置新的從站,然后可用于擴(kuò)展,并根據(jù)故障轉(zhuǎn)移的需要提升為主站。本節(jié)介紹以下技術(shù):
簡單的復(fù)制
將數(shù)據(jù)和事務(wù)復(fù)制到從站
注入空的交易
排除與gtid_purged的交易
恢復(fù)GTID模式從站
全局事務(wù)標(biāo)識符被添加到MySQL復(fù)制中,以便簡化對復(fù)制數(shù)據(jù)流和特別是故障轉(zhuǎn)移活動的一般管理。 每個標(biāo)識符唯一標(biāo)識一組構(gòu)成一個事務(wù)的二進(jìn)制日志事件。 GTID在對數(shù)據(jù)庫進(jìn)行更改時扮演著重要的角色:服務(wù)器會自動跳過任何具有服務(wù)器識別為之前處理過的標(biāo)識符的事務(wù)。 此行為對于自動復(fù)制定位和正確的故障轉(zhuǎn)移至關(guān)重要。
在二進(jìn)制日志中捕獲標(biāo)識符和包含給定事務(wù)的事件集合之間的映射。 使用來自其他現(xiàn)有服務(wù)器的數(shù)據(jù)供應(yīng)新服務(wù)器時,這帶來了一些挑戰(zhàn)。 為了再現(xiàn)在新服務(wù)器上設(shè)置的標(biāo)識符,需要將標(biāo)識符從舊服務(wù)器復(fù)制到新服務(wù)器,并保持標(biāo)識符與實際事件之間的關(guān)系。 這對于恢復(fù)作為候選者立即可用的從站成為故障切換或切換的新主站是必要的。
簡單的復(fù)制。在新服務(wù)器上重現(xiàn)所有標(biāo)識符和事務(wù)的最簡單方法是將新服務(wù)器變?yōu)榫哂腥繄?zhí)行歷史記錄的主服務(wù)器的從服務(wù)器,并在兩臺服務(wù)器上啟用全局事務(wù)標(biāo)識符。
一旦復(fù)制啟動,新的服務(wù)器將從主服務(wù)器復(fù)制整個二進(jìn)制日志,從而獲得有關(guān)所有GTID的所有信息。
該方法簡單有效,但要求從機(jī)從主機(jī)讀取二進(jìn)制日志; 有時需要較長的時間才能使新的從機(jī)跟上主機(jī),所以這種方法不適用于快速故障切換或備份恢復(fù)。 本節(jié)介紹如何通過將二進(jìn)制日志文件復(fù)制到新服務(wù)器來避免從主服務(wù)器獲取所有執(zhí)行歷史記錄。
將數(shù)據(jù)和事務(wù)復(fù)制到從站。 當(dāng)源服務(wù)器先前已經(jīng)處理了大量的事務(wù)時,執(zhí)行整個事務(wù)歷史可能是耗時的,而這可能是設(shè)置新復(fù)制從服務(wù)器時的主要瓶頸。 為了消除這種需求,可以將源服務(wù)器包含的數(shù)據(jù)集,二進(jìn)制日志和全局事務(wù)信息的快照導(dǎo)入到新的從服務(wù)器。 源服務(wù)器可以是主服務(wù)器,也可以是從服務(wù)器,您必須確保源在復(fù)制數(shù)據(jù)之前處理了所有必需的事務(wù)。
二.2 在主從復(fù)制中使用GTID(5.7環(huán)境在線操作)
1.在每臺服務(wù)器上執(zhí)行:
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;
2.在每臺服務(wù)器上執(zhí)行:
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
3.在每臺服務(wù)器上執(zhí)行:
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
4.在每臺服務(wù)器上執(zhí)行:
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
5.在每臺服務(wù)器上,等到狀態(tài)變量ONGOING_ANONYMOUS_TRANSACTION_COUNT為零,可以使用下面的語句查詢:
SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
在復(fù)制從屬設(shè)備上,理論上可能的是,它顯示為零,然后再次為非零。這不是問題,只要一次顯示零即可。
6. 等到第5步生成的所有事務(wù)復(fù)制到所有服務(wù)器,您可以在不停止更新的情況下執(zhí)行此操作:唯一重要的是所有匿名事務(wù)都被復(fù)制。
7.如果您使用二進(jìn)制日志來進(jìn)行復(fù)制以外的任何其他操作(例如,即時備份和還原),請等到您不需要具有沒有GTID的事務(wù)的舊的二進(jìn)制日志。
例如,在步驟6完成之后,您可以在執(zhí)行備份的服務(wù)器上執(zhí)行FLUSH LOGS。 然后,明確地進(jìn)行備份,或者等待您設(shè)置的任何定期備份例程的下一次迭代。
理想情況下,等待服務(wù)器清除第6步完成時存在的所有二進(jìn)制日志。 還等待在步驟6之前進(jìn)行的任何備份過期。
Important--沒回頭路了
這是第二重要的一點。 理解包含匿名事務(wù)的二進(jìn)制日志,而不使用GTIDs在下一步之后不能使用是非常重要的。 完成此步驟之后,您必須確保沒有GTID的事務(wù)不存在于拓?fù)渲械娜魏挝恢谩?br/>8.在每臺服務(wù)器上執(zhí)行:
SET @@GLOBAL.GTID_MODE = ON;
9.在每臺服務(wù)器上, 在my.cnf參數(shù)文件中添加gtid-mode=ON
gtid_mode=ON
#log_slave_updates=1
enforce-gtid-consistency=1
10.change master-從庫
STOP SLAVE [FOR CHANNEL 'channel'];
CHANGE MASTER TO MASTER_AUTO_POSITION = 1 [FOR CHANNEL 'channel'];
START SLAVE [FOR CHANNEL 'channel'];
二.3 在主從復(fù)制中關(guān)閉GTID(MySQL 5.7.6或更高版本 環(huán)境在線操作)
1.在每個從站上執(zhí)行以下操作,如果使用多源復(fù)制,請為每個通道執(zhí)行此操作,并包含F(xiàn)OR CHANNEL通道子句
語法:
STOP SLAVE [FOR CHANNEL 'channel'];
CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE = file, MASTER_LOG_POS = position [FOR CHANNEL 'channel'];
START SLAVE [FOR CHANNEL 'channel'];
使用MASTER_LOG_FILE和MASTER_LOG_POS開啟主從
CHANGE MASTER TO
MASTER_AUTO_POSITION = 0,
MASTER_LOG_FILE = 'mysql-bin.000008',
MASTER_LOG_POS = 677786318;
2.在每臺服務(wù)器上執(zhí)行:
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
3.在每臺服務(wù)器上執(zhí)行:
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
4.在每個服務(wù)器上,等待變量@@ GLOBAL.GTID_OWNED等于空字符串。 這可以使用以下方法檢查:
SELECT @@GLOBAL.GTID_OWNED;
在復(fù)制從機(jī)上,理論上可能這是空的,然后又是非空的。 這不是一個問題,只要它是空的就足夠了。
5.等待任何二進(jìn)制日志中當(dāng)前存在的所有事務(wù)復(fù)制到所有從站。 有關(guān)檢查所有匿名事務(wù)已復(fù)制到所有服務(wù)器的方法。
6.如果您將二進(jìn)制日志用于除復(fù)制以外的其他任何操作,例如執(zhí)行時間點備份或還原:請等到您不需要具有GTID事務(wù)的舊的二進(jìn)制日志。
例如,在步驟5完成之后,您可以在要備份的服務(wù)器上執(zhí)行FLUSH LOGS。然后,明確地進(jìn)行備份,或者等待您設(shè)置的任何定期備份例程的下一次迭代。
理想情況下,等待服務(wù)器清除第5步完成時存在的所有二進(jìn)制日志。等待第5步之前的備份過期。
重要
這是這個程序中的一個重點。理解包含GTID事務(wù)的日志在下一步之后不能使用是很重要的。在繼續(xù)之前,您必須確定GTID事務(wù)不存在于拓?fù)渲械娜魏蔚胤健?br/>7.在每臺服務(wù)器上執(zhí)行:
SET @@GLOBAL.GTID_MODE = OFF;
8.在每臺服務(wù)器上, 在my.cnf參數(shù)文件中注釋掉gtid-mode相關(guān)的參數(shù)
#gtid_mode=ON
#log_slave_updates=1
#enforce-gtid-consistency=1
到此,關(guān)于“GTID的基本知識有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
文章標(biāo)題:GTID的基本知識有哪些
標(biāo)題網(wǎng)址:http://www.yijiale78.com/article2/jcsjic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、網(wǎng)站營銷、建站公司、商城網(wǎng)站、自適應(yīng)網(wǎng)站、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)