mysql5.6 优点_MySQL5.6复制:GTID的优点和限制(第一部分)_MySQL
bitsCN.com
全局事務標示符(Global Transactions Identifier)是MySQL 5.6復制的一個新特性。它為維護特定的復制拓撲結構下服務器的DBA們大幅度改善他們的工作狀況提供了多種可能性。然而,你還應該明白當前實現的一些局限。本博文是專門對在生產環境中啟用GTID到底意味著什么進行討論的一系列文章的第一部分。
這個手冊非常到位地描述了如何才能切換到基于GTID的復制,我就不再鏊敘。
其基本步驟如下所示:讓主機成為只讀模式,這樣就可以讓從機執行所有的時間從而同主機保持為同步狀態。
修改所有服務器的配置并對它們進行重啟
使用CHANGE MASTER TO,讓所有的服務器使用GTID
關閉主機的只讀模式
這個步驟會把你所有的服務器從普通復制切換到GTID復制。但是,如果你運行的是生產系統,你可能會想一點一點啟用GTID,這樣一旦除了什么問題,也更容易進行回滾了。相關文檔中有些條目寫得不是很清楚。
比如:我們真地需要同時重啟所有的服務器嗎? 停機時間可是我們千方百計要避免的事情!
有必要讓主機變成只讀模式嗎?
我們能不能在有些從機中使用普通復制的同時,在另外的一些從機上使用GTID復制?
為了找到這些問題的答案,先讓我們創建一個比較簡單的復制配置,其中有一個主機和兩個從機,所有服務器運行的都是MySQL 5.6,都未啟用GTID。
首試:僅將其中的一個服務器配置為啟用GTID
讓我們先停止2號從機的服務,修改配置后重啟:1mysql> show slave status/G2[...]3Slave_IO_Running: No4Slave_SQL_Running: Yes5 [...]錯誤日志說明了為什么IO線程沒有啟動起來:12013-05-17 13:21:26 3130 [ERROR] Slave I/O: The slave IO thread stops because the master has GTID_MODE OFF and this server has GTID_MODE ON, Error_code: 1593
看來,很不幸的是,如果想要復制正常運行,gtid_mode必須在所有的服務器上都是ON或者都是OFF才行, 半半拉拉的絕對不行。
要是我們對主機進行重新配置會怎樣?這次,1號從機的復制會停止運行:12013-05-17 13:32:08 2563 [ERROR] Slave I/O: The slave IO thread stops because the master has GTID_MODE ON and this server has GTID_MODE OFF, Error_code: 1593
這兩個簡單的試驗回答了頭兩個問題:只有在所有的服務器中的gtid_mode具有相同的值時,復制才能正常運行,因此,你應該對它們同時進行重啟,而且最好是在將主機成為只讀模式后進行。然而,“同時”的意思是“在同一個binlog位置上”,所以你完全可以一個接一個對服務器進行重啟。
再試:啟用GTID,混合使用普通復制和GTID復制
這次我們在1號從機而不是2號從機上啟用GTID:1# slave #12mysql> change master to master_auto_position = 1;3mysql> start slave;接下來讓我們在主機上創建一個新表:
1mysql> create table test.t (id int not null auto_increment primary key);
在兩個從機上都運行SHOW TABLES FROM test表明,所有的服務器都創建了這個新表。因此,一旦在所有的服務器上啟用GTID,你就可以讓某些從機使用基于文件的定位而讓另外一些從機使用基于GTID的定位。
這就回答了第二個問題:我們可以讓不同的服務器具有不同的復制模式,但所有的服務器必須將將gtid_mode設置為ON。在gtid_mode為ON的情況下還運行基于文件的復制,這能有什么意思?我還沒有發現這有什么用處,所以在實踐中,你可能會要么只用基于文件的復制在(所有服務器都設置為gtid_mode=off),要么只用基于GTID的復制(所有服務器都設置為gtid_mode=on)。
還有一個問題:如何通過查看SHOW SLAVE STATUS的輸出才能看出來一個從機是不是基于GTID的復制?這可以通過查看最后一個字段,Auto_Position,的值進行區分:1# Slave #12mysql> show slave status/G3[...]4Auto_Position: 1 -> GTID-based positioning5# Slave #26mysql> show slave status/G7[...]8Auto_Position: 0 -> File-based positioning
結束語
如果你的應用輕易不能容忍停機時間或者只讀模式,那么基于GTID的復制啟用起來就會非常棘手,特別在需要重新配置大量服務器的情況下,便更是如此了。要是能將gtid_mode為ON的服務器同gtid_mode為OFF的服務器混合使用就好了,因為這樣的話,就就能夠簡化轉向基于GTID的復制的所需的過程,如果出了錯還更容易進行回滾。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql5.6 优点_MySQL5.6复制:GTID的优点和限制(第一部分)_MySQL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ssm框架逻辑删除mysql_Mybat
- 下一篇: Shell else if mysql_