1. 程式人生 > >MySQL5.7半同步複製技術

MySQL5.7半同步複製技術

Mysql的複製分為4種:

1、非同步複製replication

2、Semi-sync replication  半同步複製 效能基於非同步和全同步之間

3、Sync replication 全同步

4、Mysql cluster 基於NDB引擎

普通非同步複製理解:

正常的複製為:事務一(t1)寫入binlog buffer;dumper 執行緒通知slave有新的事務t1;binlog buffer 進行checkpoint;slave的io執行緒接收到t1並寫入到自己的的relay log;slave的sql執行緒寫入到本地資料庫。 這時,master和slave都能看到這條新的事務,即使master掛了,slave可以提升為新的master。

但是會出現問題:

當事務t1寫入binlog  buffer,dumper執行緒通知slave有了新的事務t1,binlog buffer進行checkpoint,slave因為網路不穩定,沒有收到t1事務,這個時候正好master又掛掉了,slave提升為主庫 ,t1事務就丟失了

還有一個性能問題:

當主庫業務的併發量上來,或者進行大事務的DML操作,slave因為要序列執行master上的併發操作,會導致很大延遲,不過下面的半同步可以解決這個問題

半同步基本原理:

在master的dumper執行緒通知slave後,增加了一個ackack作為一個標記,即是否成功收到事務t1的標誌碼。也就是dumper執行緒除了傳送t1到slave,還承擔了接收slave的ack工作。

這樣其實就增加了dumper執行緒的額外開銷如果出現異常,沒有收到ack,那麼將自動降級為普通的複製,直到異常修復。

半同步的問題:

1、如果異常發生,會降級為普通的複製。 那麼從機出現數據不一致的機率會減少,並不是完全消失。

2、主機dumper執行緒承擔的工作變多了,這樣顯然會降低整個資料庫的效能。

3、在MySQL 5.5和5.6使用after_commit的模式下, 即如果slave 沒有收到事務,也就是還沒有寫入到relay log 之前,網路出現異常或者不穩定,此時剛好master掛了,系統切換到從機,兩邊的資料就會出現不一致。 在此情況下,slave會少一個事務的資料。

什麼是after_commit(5.6預設值)和after_sync模式(5.7預設值,5.6沒有)?

After_commit

Master將事務寫進binlog日誌中,傳遞到slave重新整理到relay_log,同時master提交事務。Master等待slave反饋寫入了relay log,只有收到sck包後master才會將commit ok結果反饋給客戶端

After_sync

master將事務寫進binlog中,傳到slave重新整理到磁碟relay log。Master等待slave收到ack包之後,再提交事務並且返回commit ok結果給客戶端,這樣即使主庫宕機了,也可以保證所有主庫上的書屋都已經同步到了slave的relay log上去

5.7的半同步複製效能也得到大幅度提升,支援傳送binlog和接收ack包非同步化,似的dumper執行緒壓力減少,不再是同步的瓶頸。

rpl_semi_sync_master_wait_slave_count引數可以控制接收多少個slave寫事務成功反饋

個人認為5.7複製特性裡面比較重要的點來了

Replication的組提交

MySQL5.7有個新的變數 slave_parallel_type 他有2個引數

1、database 基於庫的並行複製方式

2、Logical——clock 基於組的並行複製方式

Mysql5.6也支援並且複製(暫且可以叫他偽並行複製),但是其並行只是基於DATABASE的,也就是基於庫的。如果使用者的MySQL資料庫例項中存在多個DATABASE ,對於從機複製的速度的確可以有比較大的幫助,如果使用者例項僅有一個庫,那麼就無法實現並行回放,甚至效能會比原來的單執行緒更差。

MySQL5.7的話會為同時進入commit階段的事務分配相同的序列號,相同序列號的事務在slave中是可以併發執行的。真正實現了並行複製,最重要的原因是slave的回放和主機是一致的,不會再有庫的並行複製限制,對binlog日誌的格式也沒有特殊的要求。

總結:

Mysql5.7在半同步複製技術上使得資料庫執行效率得到了質的飛躍。

相關推薦

MySQL5.7同步複製技術

Mysql的複製分為4種: 1、非同步複製replication 2、Semi-sync replication  半同步複製 效能基於非同步和全同步之間 3、Sync replication 全同步 4、Mysql cluster 基於NDB引擎 普通非同步複製理解:

MySQL5.7同步複製

實驗實現: master:192.168.1.117 slave1:192.168.1.228 slave2:192.168.1.229   一、安裝前提 1、MySQL5.5 版本或更高 2、主、備庫的 have_dynamic_loading 系統變數值為

MySQL5.7 同步復制

span 日誌 提交 插件 comm 發生 master info 同步 一、概述 5.5與5.7的半同步復制可能存在差異,從MySQL5.5開始,MySQL以插件的形式支持半同步復制 異步:默認情況下,MySQL復制是異步的。主庫在執行完客戶端提交的事務後會立即將結果返給

mysql5.7主從同步複製(基於二進位制日誌檔案binary log file)

MySQL資料庫自身提供的主從複製功能可以方便的實現資料的多處自動備份,實現資料庫的拓展。多個數據備份不僅可以加強資料的安全性,通過實現讀寫分離還能進一步提升資料庫的負載效能。 下圖就描述了一個多個數據庫間主從複製與讀寫分離的模型: 在一主多從的資料庫體系中,多個從伺

mysql5.7的主從複製,基於GTID複製,並行複製同步複製

一 最簡單的AB主從複製 MySQL之間資料複製的基礎是二進位制日誌檔案(binary log file)。一臺MySQL資料庫一旦啟用二進位制日誌後,其作為master,它的資料庫中所有操作都會以“事件”的方式記錄在二進位制日誌中,其他資料庫作為slave通

MySQL5.7安裝+基於GTID主從複製+並行複製+增強同步複製+讀寫分離+M-S-S架構(聯級複製

實驗環境: Centos7.2 角色 主機IP server_id 資料狀態 Proxysql 192.168.148.62 nul

MySQL 5.7同步復制技術

分布 整體 並發 直接 cli 添加 title poll機制 不同步 一、復制架構衍生史 在談這個特性之前,我們先來看看MySQL的復制架構衍生史。 在2000年,MySQL 3.23.15版本引入了Replication。Replication作為一種準實時同步方式

MySQL 5.7同步複製

環境 角色 IP port master 192.168.80.136 3310 slave 192.168.80.137 3310 master [mysqld] rpl_semi_sync_master_enabled=1 rp

配置mysql5.5主從複製同步複製、主主複製

mysql主伺服器 192.168.8.40 mysql從伺服器 192.168.8.41 全新配置過程(主和從資料庫都沒有資料):    主從複製主伺服器設定:      1.改server-id      2.啟用二進位制日誌      # mkdir /data/b

ubuntu16配置mysql5.7主從同步

mysqld 設置 update 三臺 host 測試 start mysql sha 測試環境如下:   master: 10.0.0.26   slave01: 10.0.0.27   slave02: 10.0.0.28 一、三臺機均安裝mysql-server5

mysql5.7主從同步

oot 修改配置文件 oca 連接 打開 lin 啟動 執行 back 準備兩臺虛機,在同一個網段,裝的mysql都是同一個版本,我這裏裝的都是5.7一臺是linux(192.168.19.200)主,一臺是centos(192.168.19.130)從步驟如下:1、修改配

mysql GTID 同步複製

1)什麼是GTID GTID(Global Transaction ID)是對於一個已提交事務的編號,並且是一個全域性唯一的編號。GTID實際上是由UUID+TID組成的。其中UUID是一個MySQL例項的唯一標 識,儲存在mysql資料目錄下的auto.cnf檔案裡。TID代表了該例項上已經提交的事務數量

Centos7安裝MySQL5.7和主從複製配置

一:MySQL安裝 1、下載tar包,這裡使用wget從官網下載 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz 2、將mysql安裝

MySQL主從複製,並行複製同步複製和組複製

主從複製 主從複製過程存在三個執行緒,Master端的I/O執行緒,Slave的I/O執行緒與SQL執行緒。Master端需要開啟binlog日誌,Slave端需要開啟relaylog。 1、Slave端的I/O讀取master.info檔案,獲取binlog檔名和位置點,然後向Mast

《深入淺出MySQL:資料庫開發、優化與管理維護(2nd)》第31章之MySQL同步複製搭建學習筆記

MySQL的非同步複製在使用的過程中,主庫和從庫的資料之間存在一定的延遲,這樣存在一個隱患:當在主庫上寫入一個事務並提交成功,而從庫尚未得到主庫推送的Binlog日誌時,主庫宕機了,例如主庫可能因磁碟損壞、記憶體故障等造成主庫上該事務Binlog丟失,此時從庫就可能損失這個事務,從而造成主從不一致。

Mysql 同步複製和非同步複製

mysql 半同步複製和非同步複製 -- 在主庫中安裝半同步外掛,開啟半同步複製功能 install plugin rpl_semi_sync_master soname 'semisync_master.so'; set global rpl_semi_sync_master_enab

MySQL5.7的並行複製

  MySQL5.6開始支援以schema為維度的並行複製,即如果binlog row event操作的是不同的schema的物件,在確定沒有DDL和foreign key依賴的情況下,就可以實現並行複製。 社群也有引入以表為維度或者以記錄為維度的並行複製的版本,不管是schema,table或者

Replication進階(八) 同步複製狀態切換

文章目錄 半同步複製狀態切換 一、簡介 二、狀態切換 半同步切換非同步狀態 非同步切換到半同步 半同步複製狀態切換 一、簡介 假設當前m-s處於半同步複製狀態,這個狀態

同步複製中可能出現的異常情況以及應該如何應對?

文章目錄 半同步複製如何應對各種異常情況? 一、準備知識 事務提交會經歷哪些階段 何為半同步複製 二、可能出現哪些異常以及如何解決 master 在flush binlog之前宕機

MySQL高可用方案 MHA之四 keepalived 同步複製

    [[email protected] ~]# cat /etc/mysql_mha/app1.cnf [server default]manager_log=/data/mysql_mha/app1-manager.logmanager_workdir=/data/m