亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

在MySQL中使用GTIDs復(fù)制協(xié)議和中斷協(xié)議的教程

 更新時間:2015年04月22日 10:25:36   投稿:goldensun  
這篇文章主要介紹了在MySQL中使用GTIDs復(fù)制協(xié)議和中斷協(xié)議的教程,主要用于多個服務(wù)器之間的通信,需要的朋友可以參考下

 MySQL5.6有很多新的特性,其中很多人都感興趣的一條就是全局事務(wù)序號功能(GTIDs)。而大家都對這一特性很感興趣的原因也很好理解,即:本來重新連接從服務(wù)器和一個新的主服務(wù)器一直是件很麻煩的事,然而在啟用GTIDs功能之后就變得簡單易行。可是,GTIDs的使用不單單是用單獨(dú)的標(biāo)識符替換舊的二進(jìn)制日志文件/位置,它也采用了新的復(fù)制協(xié)議。假如你還不太明白這些,那你可以在這篇文章里學(xué)點(diǎn)什么。
復(fù)制協(xié)議:新的 VS 舊的

舊的協(xié)議往往簡單直接即:首先從服務(wù)器上在一個特定的偏移量那里連接到一個給定的二進(jìn)制日志文件,然后主服務(wù)器在從那里發(fā)送所有的事務(wù)。


新協(xié)議稍有不同:slave首先會發(fā)送它已經(jīng)執(zhí)行過的GTID的范圍,然后master發(fā)送每一個丟失的事務(wù). 它也確保了一個給定的GTID只可以在一個特定的slave中執(zhí)行一次.

實(shí)踐中,這會改變?nèi)魏螙|西嗎? 使得,它會改變很多東西. 想象一下下面的場景: 你想要從trx 4開始復(fù)制,但是trx2在slave上因?yàn)槟撤N緣故丟失了. 

2015422100429095.png (529×265)

 使用老協(xié)議的話,trx 2再也不會被執(zhí)行一次,而使用新協(xié)議,它就會被自動的再執(zhí)行一次.

下面是兩個你可以在實(shí)踐中看到新協(xié)議的通用場景.

跳過事務(wù)

眾所周知老的 SET GLOBAL sql_slave_skip_counter = N 在你想要跳過一個事務(wù)時不再提供支持,而GTID就可以被啟用了. 換用 GTID XXX:N 來跳過事務(wù), 你須得 注入一個空的事務(wù):
 

mysql> SET gtid_next = 'XXX:N';
mysql> BEGIN; COMMIT;
mysql> SET gtid_next = 'AUTOMATIC';

為什么我們不能使用 sql_slave_skip_counter? 就是因?yàn)樾碌膹?fù)制協(xié)議!

想象一下我們擁有如下圖所示的三臺服務(wù)器: 

2015422100610975.png (529×416)

 讓我們假設(shè) sql_slave_skip_counter 可以用并且已經(jīng)被用在S2上用于跳過trx2. 如果你吧S2設(shè)置成S1的一個slave將會發(fā)生什么呢?


兩個服務(wù)器會互相交換被執(zhí)行了GTID的范圍,并且S1將會意識到其必須將trx2發(fā)送給S2. 然后會發(fā)生的事情有兩種可能:

  1.     如果 trx 2 仍然在S1的二進(jìn)制日志中,它將會被發(fā)送給S2,而事務(wù)在也不會被跳過了.
  2.     如果 trx 2 不再存在于S1的二進(jìn)制日志中,你將會得到一個復(fù)制錯誤.

很明顯這不安全,這就是為什么 sql_slave_skip_counter 在使用GTID時是不能用的. 要想跳過一個事務(wù),唯一安全的選擇就是去執(zhí)行一個虛擬的事務(wù),而不是一個真實(shí)的事務(wù).
 
錯誤的事務(wù)

如果你在一個slave上本地執(zhí)行了一個事務(wù) (在MySQL文檔中被稱為錯誤事務(wù)), 如果你被這個事務(wù)推送到新的master上時會發(fā)生什么呢?

使用老協(xié)議,基本上沒啥事(準(zhǔn)確點(diǎn)說,新的master和其slave之間的數(shù)據(jù)將會出現(xiàn)不一致,但那在稍后就可能會被修復(fù)).

使用新協(xié)議,錯誤的事務(wù)將會被識別成為在每個地方都丟失了,并且將會自動在容錯備份上被執(zhí)行,這樣就將會導(dǎo)致打斷復(fù)制的隱患.

比方說,你擁有一個master(M)和兩個slave (S1 和 S2). 這里有兩種將slave重連到新的master將會發(fā)生(帶有不同復(fù)制錯誤的)失敗的場景:

# 場景 1
 

# S1
mysql> CREATE DATABASE mydb;
# M
mysql> CREATE DATABASE IF NOT EXISTS mydb;
# Thanks to 'IF NOT EXITS', replication doesn't break on S1. Now move S2 to S1:
# S2
mysql> STOP SLAVE; CHANGE MASTER TO MASTER_HOST='S1'; START SLAVE;
# This creates a conflict with existing data!
mysql> SHOW SLAVE STATUS\G
[...]
Last_SQL_Errno: 1007
        Last_SQL_Error: Error 'Can't create database 'mydb'; database exists' on query. Default database: 'mydb'. Query: 'CREATE DATABASE mydb'
[...]

# 場景 2
 

# S1
mysql> CREATE DATABASE mydb;
# Now, we'll remove this transaction from the binary logs
# S1
mysql> FLUSH LOGS;
mysql> PURGE BINARY LOGS TO 'mysql-bin.000008';
# M
mysql> CREATE DATABASE IF NOT EXISTS mydb;
# S2
mysql> STOP SLAVE; CHANGE MASTER TO MASTER_HOST='S1'; START SLAVE;
# The missing transaction is no longer available in the master's binary logs!
mysql> SHOW SLAVE STATUS\G
[...]
Last_IO_Errno: 1236
        Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'
[...]

你可以這樣理解,錯誤的事務(wù)應(yīng)該借助基于GTID的服務(wù)得以避免. 如果你需要運(yùn)行一個本地事務(wù),最好的選擇是針對那條特定的語句禁用二進(jìn)制日志:
 

mysql> SET SQL_LOG_BIN = 0;
mysql> # Run local transaction

結(jié)論

GTIDs在讓我們方便重新和其他服務(wù)器連接副本方面是個不小的進(jìn)步。然而同樣的在運(yùn)維方面我們也因此面臨新的困難和挑戰(zhàn)。假如你打算開始使用GTIDs,那么你就得確實(shí)理解新的復(fù)制協(xié)議,否則你就會以一種想不到的方式結(jié)束復(fù)制過程。

相關(guān)文章

  • 圖文詳解Ubuntu下安裝配置Mysql教程

    圖文詳解Ubuntu下安裝配置Mysql教程

    這篇文章主要以圖文結(jié)合的方式詳細(xì)為大家介紹了Ubuntu安裝配置Mysql的實(shí)現(xiàn)步驟,感興趣的小伙伴們可以參考一下
    2016-05-05
  • MySQL事務(wù)隔離機(jī)制詳解

    MySQL事務(wù)隔離機(jī)制詳解

    在數(shù)據(jù)庫中,事務(wù)是指一組邏輯操作,這些操作要么全部執(zhí)行,要么全部不執(zhí)行,是一個不可分割的工作單位,這篇文章主要介紹了MySQL事務(wù)隔離機(jī)制,需要的朋友可以參考下
    2022-11-11
  • Mysql數(shù)據(jù)庫的導(dǎo)入導(dǎo)出方式(各種情況)

    Mysql數(shù)據(jù)庫的導(dǎo)入導(dǎo)出方式(各種情況)

    這篇文章主要介紹了Mysql數(shù)據(jù)庫的導(dǎo)入導(dǎo)出方式(各種情況),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • mysql實(shí)用技巧之比較兩個表是否有不同數(shù)據(jù)的方法分析

    mysql實(shí)用技巧之比較兩個表是否有不同數(shù)據(jù)的方法分析

    這篇文章主要介紹了mysql實(shí)用技巧之比較兩個表是否有不同數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了mysql數(shù)據(jù)表比較的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • mysql條件查詢and or使用方法及優(yōu)先級實(shí)例分析

    mysql條件查詢and or使用方法及優(yōu)先級實(shí)例分析

    這篇文章主要介紹了mysql條件查詢and or使用方法及優(yōu)先級,結(jié)合實(shí)例形式分析了mysql條件查詢and or基本功能、用法及優(yōu)先級相關(guān)操作技巧,需要的朋友可以參考下
    2020-04-04
  • MySQL中的行級鎖、表級鎖、頁級鎖

    MySQL中的行級鎖、表級鎖、頁級鎖

    這篇文章主要介紹了MySQL中的行級鎖、表級鎖、頁級鎖,以及分享了多種避免死鎖的方法,感興趣的小伙伴們可以參考一下
    2016-01-01
  • sql 流水號獲取代碼實(shí)例

    sql 流水號獲取代碼實(shí)例

    這篇文章主要介紹了sql 流水號獲取代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • MySQL中符號@的作用

    MySQL中符號@的作用

    本文主要介紹了MySQL中符號@的作用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • MySql事務(wù)無法回滾的原因有哪些

    MySql事務(wù)無法回滾的原因有哪些

    使用MySQL時,如果發(fā)現(xiàn)事務(wù)無法回滾,但Hibernate、Spring、JDBC等配置又沒有明顯問題,到底是什么原因,下面與大家分享下
    2014-07-07
  • MySQL存儲過程in、out和inout參數(shù)示例和總結(jié)

    MySQL存儲過程in、out和inout參數(shù)示例和總結(jié)

    這篇文章主要給大家介紹了關(guān)于MySQL存儲過程in、out和inout參數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論