標籤:
原創 2016-07-21 宋利兵 MySQL中文網
分享主題
《MySQL 5.7 Replication新特性》
嘉賓介紹
宋利兵,MySQL研發工程師。2009年加入MySQL全球研發團隊,從事MySQL複製相關功能的開發。
主題介紹
主要分享在MySQL 5.7中,Replication(複製)相關的一些新特性,比如多源複製、增強半同步複製、並行複製等。
Agenda
GTID複製
多線程並發複製
半同步複製
多源複製
其他特性
這次的PPT、錄音我也同時放到百度雲端硬碟裡了,歡迎下載轉存。百度雲端硬碟連結: http://pan.baidu.com/s/1gfNR7NH 密碼: adqm 。
互動問題解答
由於篇幅有限,我們選擇了10個比較有代表意義的問題進行解答。
問1:多源複製下,支援master是5.6,slave是5.7嗎?
答:可以的
【老葉補充】非常不建議跨大版本的MySQL Replication。
問2:半同步複製設定N個slave應答,如果當前Slave小於N會怎樣?
答:取決於rpl_semi_sync_master_wait_no_slave的設定。
- rpl_semi_sync_master_wait_no_slave = 0
會立刻變成非同步複製。
- rpl_semi_sync_master_wait_no_slave = 1
仍然等待應答,直到逾時。
問3:gtid 如果出現不支援的語句,怎麼解決
答:從應用中去掉不支援的語句/事務:
例如:
- CREATE TABLE ... SELECT
可以該為:
CREATE TABLE
INSERT ... SELECT
問4:基於GTID的複製,可以指定GTID複製的起始位置麼,還是只能根據現有的資訊?
答:GTID複製就是為了擺脫對binlog檔案名稱和位置的依賴。所以不能指定複製的起始位置,也完全沒有必要指定。
問5:對一個已經開啟GTID的資料庫再做一個從庫,先把Master備份下來還原到新slave上去,直接可以同步了還是先需要做purge_gtid的操作再同步呢?
答:需要設定gtid_purged。整個過程可以通過mysqldump完成。
請參考手冊:http://dev.mysql.com/doc/refman/5.7/en/replication-gtids-failover.html#replication-gtids-failover-copy
問6:線上全是5.5的環境,有沒有辦法搭建5.5到5.7的複製?
答:可以,但不能開啟gtid功能。
【老葉補充】非常不建議跨大版本的MySQL Replication,更何況是垮了2個大版本,最好是先進行升級。
問7:並行複製logical_clock,如果不開啟gtid是不是就不能並行了?
答:不開啟gtid,也能使用logical_clock並行複製。
問8:在主從複製過程中,是主向從推資料還是從拉資料,如果這個傳送的過程中,出現網路閃斷,會不會造成資料包丟失,會執行校正重傳嘛?
答:Slave 的IO線程發起到Master的串連。
然後master開始發送events,slave只是被動的接收。
slave和master之間使用的是tcp 串連。tcp是可靠的串連。網路丟包等都是tcp層自動處理的。
mysql不需要處理。
如果slave長時間不能收到一個完整的Event,或者接收event時出錯。slave
會進行相應的處理。
如果slave認為,重建立立串連能解決問題。slave則自動的斷開原來的串連,然後重新串連到master去。
如果slave認為,這個錯誤無法自動解決,slave會停掉io線程,並報錯。
問9:設定了binlog_group_commit_sync_delay參數,在宕機的時候應該不會影響binglog檔案安全吧?
答:不影響
問10:多源複製是只能在非同步模式下使用嗎?因為半同步的狀態是全域的,一個通道關閉會導致其它通道出錯,有沒有考慮將半同步狀態改成每個channel的私人配置呢?
答:只有一個通道可以開啟seimsync,其他的都要使用非同步通道。不光是Semisync,非同步通道的狀態也要改成每個channel的私人配置,都有考慮。
《MySQL 5.7 Replication新特性》分享之互動問題解答