中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL異步復制是什么

發布時間:2020-08-17 09:34:44 來源:億速云 閱讀:182 作者:小新 欄目:開發技術

MySQL異步復制是什么?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

異步復制

MySQL的復制默認是異步的,主從復制至少需要兩個MYSQL服務,這些MySQL服務可以分布在不同的服務器上,也可以在同一臺服務器上。

MySQL主從異步復制是最常見的復制場景。數據的完整性依賴于主庫BINLOG的不丟失,只要主庫的BINLOG不丟失,那么就算主庫宕機了,我們還可以通過BINLOG把丟失的部分數據通過手工同步到從庫上去。

注意:主庫宕機的情況下,DBA可以通過mysqlbinlog工具手工訪問主庫binlog,抽取缺失的日志并同步到從庫上去;也可以通過配置高可用MHA架構來自動抽取缺失的數據補全從庫,或者啟用Global Transaction Identifiers(GTID)來自動抽取缺失binlog到從庫。

MySQL在BINLOG中記錄事務(或SQL語句),也就是說對于支持事務的的引擎(例如InnoDB)來說,每個事務提交時都需要寫BINLOG;對于不支持事務的引擎(例如MyISAM)來說,每個SQL語句執行完成時,都需要些BINLOG。為了保證Binlog的安全,MySQL引入sync_binlog參數來控制BINLOG刷新到磁盤的頻率。

show variables like 'sync_binlog';

MySQL異步復制是什么

  • 在默認情況下,sync_binlog=1,表示事務提交之前,MySQL都需要先把BINLOG刷新到磁盤,這樣的話,即使出現數據庫主機操作系統崩潰或者主機突然掉電的情況,系統最多損失prepared狀態的事務;設置sync_binlog=1,盡可能保證數據安全。
  • sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系統自己控制文件緩存的刷新。
  • sync_binlog=N,如果N不等于0或者1,刷新方式同sync_binlog=1類似,只不過此時會延長刷新頻率至N次binlog提交組之后。
     

以上是傳統的異步復制,在MySQL5.7的并行復制技術(也稱多線程復制)到來之前,為人詬病最多的還是效率問題,slave延遲是一個頑疾,雖然之前已經出現了schema級別的并行復制,但實際效果并不好。

多線程復制

在MySQL5.7中,帶來了全新的多線程復制技術,解決了當master同一個schema下的數據發生了變更,從庫不能并發應用的問題,同時也真正將binlog組提交的優勢充分發揮出來,保障了從庫并發應用Relay Log的能力。

在MySQL8.0中,多線程復制又進行了技術更新,引入了writeset的概念,而在之前的版本中,如果主庫的同一個會話順序執行多個不同相關對象的事務,例如,先執行了Update A表的數據,又執行了Update B表的數據,那么BINLOG在復制到從庫后,這兩個事務是不能并行執行的,writeset的到來,突破了這個限制。

增強半同步復制

前面介紹的復制是異步操作,主庫和從庫的數據之間難免會存在一定的延遲,這樣存在一個隱患:當在主庫上寫入一個事務并提交成功,而從庫尚未得到主庫的BINLOG日志時,主庫由于磁盤損壞、內存故障、斷電等原因意外宕機,導致主庫上該事務BINLOG丟失,此時從庫就會損失這個事務,從而造成主從不一致。

為了解決這個問題,從MySQL5.5開始,引入了半同步復制,此時的技術暫且稱之為傳統的半同步復制,因該技術發展到MySQL5.7后,已經演變為增強半同步復制(也成為無損復制)。在異步復制時,主庫執行Commit提交操作并寫入BINLOG日志后即可成功返回客戶端,無需等待BINLOG日志傳送給從庫。而半同步復制時,為了保證主庫上的每一個BINLOG事務都能夠被可靠地復制到從庫上,主庫在每次事務成功提交時,并不及時反饋給前端應用用戶,而是等待至少一個從庫(詳見參數rpl_semi_sync_master_wait_for_slave_count)也接收到BINLOG事務并成功寫入中繼日志后,主庫才返回Commit操作成功給客戶端(不管是傳統的半同步復制,還是增強的半同步復制,目的都是一樣的,只不過兩種方式有一個席位地方不同,將在下面說明)

半同步復制保證了事務成功提交后,至少有兩份日志記錄,一份在主庫的BINLOG日志上,另一份在至少一個從庫的中繼日志Relay Log上,從而更進一步保證了數據的完整性。

在傳統的半同步復制中,主庫寫數據到BINLOG,且執行Commit操作后,會一直等待從庫的ACK,即從庫寫入Relay Log后,并將數據落盤,返回給主庫消息,通知主庫可以返回前端應用操作成功,這樣會出現一個問題,就是實際上主庫已經將該事務Commit到了事務引擎層,應用已經可以可以看到數據發生了變化,只是在等待返回而已,如果此時主庫宕機,有可能從庫還沒能寫入Relay Log,就會發生主從庫不一致。增強半同步復制就是為了解決這個問題,做了微調,即主庫寫數據到BINLOG后,就開始等待從庫的應答ACK,直到至少一個從庫寫入Relay Log后,并將數據落盤,然后返回給主庫消息,通知主庫可以執行Commit操作,然后主庫開始提交到事務引擎層,應用此時可以看到數據發生了變化。增強半同步復制。

半同步復制模式下,假如在傳送BINLOG日志到從庫時,從庫宕機或者網絡延遲,導致BINLOG并沒有即使地傳送到從庫上,此時主庫上的事務會等待一段時間(時間長短由參數rpl_semi_sync_master_timeout設置的毫秒數決定),如果BINLOG在這段時間內都無法成功發送到從庫上,則MySQL自動調整復制為異步模式,事務正常返回提交結果給客戶端。

半同步復制很大程度上取決于主從庫之間的網絡情況,往返時延RTT越小決定了從庫的實時性越好。通俗地說,主從庫之間的網絡越快,從庫約實時。

注意:往返時延RTT(Round-Trip Time)在計算機網絡中是一個重要的性能指標,它表示從發送端發送數據開始到發送端接收到接收端的確認,總共經歷的時長(這里可能有點拗口,我們可以理解為TCP三次握手的前兩次握手)。

感謝各位的閱讀!看完上述內容,你們對MySQL異步復制是什么大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平乐县| 阜新| 怀宁县| 安阳县| 长汀县| 南昌市| 报价| 凉城县| 镇康县| 运城市| 罗江县| 宝坻区| 惠安县| 米易县| 永昌县| 沅陵县| 中江县| 沾益县| 开远市| 略阳县| 蒲城县| 紫阳县| 梅州市| 宜都市| 铜陵市| 鸡泽县| 镇雄县| 潍坊市| 达拉特旗| 甘孜| 甘肃省| 金门县| 石家庄市| 乐昌市| 福清市| 七台河市| 阿城市| 永寿县| 大洼县| 永州市| 库车县|