1. 程式人生 > >MySQL主從複製原理、半同步操作步驟及原理

MySQL主從複製原理、半同步操作步驟及原理

1.1 企業Linux運維場景資料同步方案

1.1.1 檔案級別的異機同步方案

1、scp/sftp/nc 命令可以實現遠端資料同步。 
2、搭建ftp/http/svn/nfs 伺服器,然後在客戶端上也可以把資料同步到伺服器。 
3、搭建samba檔案共享服務,然後在客戶端上也可以把資料同步到伺服器。 
http://taokey.blog.51cto.com/4633273/1203553 
4、利用rsync/csync2/union等均可以實現資料同步 提示:union可實現雙同步,csync2可實現多機同步。 
以上檔案同步方式如果結合定時任何或者inotify,sersync等功能,可以實現定時以及定時的資料同步。 
5、檔案級別也可以利用mysql,mongodb等軟體作為容器實現。 
6、程式向兩個伺服器同時寫入資料,雙寫就是一個同步機制 特點:簡單、方便、效率和檔案系統級別要差一點,但是同步的節點可以提供訪問。 軟體的自身同步機制(mysql,oracle,mongdb,ttserver,redis....)檔案放到資料庫,同步到從庫,再把檔案拿出來。 
7、DRBD檔案系統級別(基於塊裝置複製,直接複製block)

1.1.2 檔案系統級別的異機同步方案

1、drbd基於檔案系統同步,相當於網路RAID1,可以同步幾乎任何業務資料。mysql資料庫的官方推薦drbd同步資料,所有單點服務例如:NFS、MFS(DRBD)MySQL等都可以用drbd做複製,效率很高,缺點:備機服務不可用 
2、資料庫同步方案: 
a.自身同步機制: mysql replication,mysql主從複製(邏輯的SQL重寫)物理複製方法<===drbd(從庫不提供讀寫) oracle dataguard(物理的磁碟塊,邏輯的SQL語句重寫)9i從庫不提供腹瀉的,11g的從庫實現了readonly 
b.第三方drbd,參考URL Heartbeat+DRBD+MySQL高可用架構方案與實施過程細節 

http://oldboy.blog.51cto.com/2561410/1240412

1.2 MySQL主從複製

  MySQL的主從複製方案,和上述檔案及檔案系統級別同步是類似的,都輸資料的傳輸。只不過MySQL無需藉助第三方工具,而是其自帶的同步複製功能,另外一點,MySQL的主從複製並不是從硬碟給上檔案直接同步,而是邏輯的binlog日誌同步到本地的應用執行的過程

提示:官方說主從不要超過9臺,推薦不超過5臺。

1、單向主從複製邏輯圖 
image_1bfc7hm45cbkdpstuh1c7vbnm9.png-28.4kB

2、雙向主主同步邏輯圖,此架構可以在Master1端或Master2端進行資料寫入 
image_1bfc7i6qjbvg1gacai610q1vftm.png-25.6kB

3、線性級聯單向雙主同步邏輯圖,此架構只能在Master1端進行資料寫入 
image_1bfc7igll1g8e1sklbp21jqpupl13.png-30.7kB

4、環狀級聯單向多主同步邏輯圖,任何一個點都可以寫入資料 
image_1bfc7iq4p1ell87b16ioqmt1iep1g.png-35.4kB

5、環狀級聯單向多主多從同步邏輯圖,此架構只能在任意一個Master端進行資料寫入 
image_1bfc7j3ogodi36t3un16vb12u21t.png-56.2kB

MySQL官方的同步架構圖 
image_1bfc7jkeq38srhv175c1fl915152a.png-141.7kB

工作中第一種方案和第二種方案最常用

1.3 MySQL主從複製原理介紹

  MySQL的主從複製是一個非同步的複製過程(雖然一般情況下感覺是實時的),資料將從一個Mysql資料庫(我們稱之為Master)複製到另一個Mysql資料庫(我們稱之為Slave),在Master與Slave之間實現整個主從複製的過程是由三個執行緒參與完成的。其中有兩個執行緒(SQL執行緒和IO執行緒)在Slave端,另一個執行緒(I/O執行緒)在Master端。

  要實現MySQL的主從複製,首先必須開啟Master端的binlog記錄功能,否則就無法實現。因為整個複製過程實際上就是Slave從aster端獲取binlog日誌,然後再在Slave上以相同順序執行獲取的binlog日誌中的記錄的各種SQL操作

image_1bfc7ljlrihrul5au0rhtnld2n.png-407.9kB
image_1bfc7lsuj9s111851lrh1osjv6s34.png-103.7kB

畫圖:

1)在Slave 伺服器上執行sart slave命令開啟主從複製開關,開始進行主從複製。

2)此時,Slave伺服器的IO執行緒會通過在master上已經授權的複製使用者許可權請求連線master伺服器,並請求從執行binlog日誌檔案的指定位置(日誌檔名和位置就是在配置主從複製服務時執行change 
master命令指定的)之後開始傳送binlog日誌內容

3)Master伺服器接收到來自Slave伺服器的IO執行緒的請求後,其上負責複製的IO執行緒會根據Slave伺服器的IO執行緒請求的資訊分批讀取指定binlog日誌檔案指定位置之後的binlog日誌資訊,然後返回給Slave端的IO執行緒。返回的資訊中除了binlog日誌內容外,還有在Master伺服器端記錄的IO執行緒。返回的資訊中除了binlog中的下一個指定更新位置。

4)當Slave伺服器的IO執行緒獲取到Master伺服器上IO執行緒傳送的日誌內容、日誌檔案及位置點後,會將binlog日誌內容依次寫到Slave端自身的Relay Log(即中繼日誌)檔案(Mysql-relay-bin.xxx)的最末端,並將新的binlog檔名和位置記錄到master-info檔案中,以便下一次讀取master端新binlog日誌時能告訴Master伺服器從新binlog日誌的指定檔案及位置開始讀取新的binlog日誌內容

5)Slave伺服器端的SQL執行緒會實時檢測本地Relay Log 中IO執行緒新增的日誌內容,然後及時把Relay LOG 檔案中的內容解析成sql語句,並在自身Slave伺服器上按解析SQL語句的位置順序執行應用這樣sql語句,並在relay-log.info中記錄當前應用中繼日誌的檔名和位置點

主從複製條件

1、開啟Binlog功能
2、主庫要建立賬號
3、從庫要配置master.info(CHANGE MASTER to...相當於配置密碼檔案和Master的相關資訊)
4、start slave 開啟複製功能

知識點

1.3個執行緒,主庫IO,從庫IO和SQL及作用
2.master.info(從庫)作用
3.relay-log 作用
4.非同步複製
5.binlog作用(如果需要級聯需要開啟Binlog)

小結:

主從複製是非同步的邏輯的SQL語句級的複製
複製時,主庫有一個I/O執行緒,從庫有兩個執行緒,I/O和SQL執行緒
實現主從複製的必要條件是主庫要開啟記錄binlog功能
作為複製的所有Mysql節點的server-id都不能相同
binlog檔案只記錄對資料庫有更改的SQL語句(來自主庫內容的變更),不記錄任何查詢(select,show)語句

1.4 環境搭建

我們準備的是多例項,一臺伺服器開啟3個服務埠不同 
環境準備:

  1. [[email protected] 3307]# netstat -lntup|grep 330
  2. tcp 000.0.0.0:33060.0.0.0:* LISTEN 3074/mysqld
  3. tcp 000.0.0.0:33070.0.0.0:* LISTEN 33364/mysqld
  4. tcp 000.0.0.0:33080.0.0.0:* LISTEN 34084/mysqld

主庫開啟Binlog功能

  1. [[email protected] 3307]# grep log-bin /data/3306/my.cnf
  2. log-bin =/data/3306/mysql-bin

設定server-id,此處ID不可以相同否則最後出現IO錯誤

  1. [[email protected] 3307]# grep server-id /data/3306/my.cnf
  2. server-id =1
  3. [[email protected] 3307]# grep server-id /data/3307/my.cnf
  4. server-id =3
  5. [[email protected] 3307]# grep server-id /data/3308/my.cnf
  6. server-id =2
  7. ========================================================
  8. [[email protected] 3307]# grep server-id /data/{3306,3307,3308}/my.cnf
  9. /data/3306/my.cnf:server-id =1
  10. /

    相關推薦

    MySQL主從複製原理同步操作步驟原理

    1.1 企業Linux運維場景資料同步方案 1.1.1 檔案級別的異機同步方案 1、scp/sftp/nc 命令可以實現遠端資料同步。  2、搭建ftp/http/svn/nfs 伺服器,然後在客戶端上也可以把資料同步到伺服器。  3、搭建sa

    mysql 主從複製 基於gtid的同步複製,並行複製同步複製

    一、mysql 主從複製 1.主從形式 mysql主從複製 靈活 一主一從 主主複製 一主多從---擴充套件系統讀取的效能,因為讀是在從庫讀取的; 多主一從---5.7開始支援 聯級複製--- 2.主從複製的用途及部署條件 mysql主從複製用途 實時災備,

    Mysql 主從復制之同步復制(基於gtid)

    半同步復制 server-id作用Mysql主從復制mysql主從復制原理:從庫有兩個線程IO線程和SQL線程1.從庫的IO線程向主庫的主進程發送請求,主庫驗證從庫,交給主庫IO線程負責數據傳輸;2.主庫IO線程對比從庫發送過來的master.info裏的信息,將binlog文件信息,偏移量和binlog文件

    MySQL主從復制和同步復制

    MySQL主從復制MySQL主從復制和半同步復制 主從復制原理 1、主從復制主要是基於二進制日誌(binlog)進行的,二進制日誌記錄的是一個個完整的事件。 2、把主服務器的二進制日誌拿到從服務器再運行一遍。 3、復制過程: 1,slave端的IO線程連上master端,請求 2,master端返回給s

    mysql 主從複製優化並行複製

    實驗環境: server2 為 server3 的 master server3 為 server1 的 master 即server1、2、3的身份如下: server2:master server3:master / slave

    MySQL主從複製同步複製原理搭建

    在MySQL5.5之前的版本中,MySQL的複製是非同步複製,主庫和從庫的資料之間存在一定的延遲,比如網路故障等各種原因,這樣子容易存在隱患就是:當在主庫寫入一個事務成功後並提交了,但是由於從庫延遲沒有及時得到主庫推送的Binlog日誌時,主庫突然宕機了,那麼此時從庫就可能損失這個事務,從而造成主從不一致的狀

    mysql主從複製,基於GTID的主從同步複製並行複製

    環境: 實驗環境: rhel6.5 , selinux和iptables均為disabled狀態,mysql均為5.7.17,或者slave比master版本高 實驗主機: 172.25.254.2 server2:master 172.25.254.3 server3:s

    Mysql主從複製同步複製並行複製

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

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

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

    mysql主從複製,基於GTID主從複製,並行複製同步複製

    複製方式: 主–從複製(A-B一主一從或者A-BC一主多從) 基於GTID複製 非同步複製 半同步複製 複製原理: Mysql中有一種日誌叫做bin日誌(二進位制日誌)。這個日誌會記錄下所有修改了資料庫的SQL語句 主從複製的原理其實就是把主伺服器上的bin日

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

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

    MySQL複製(非同步方式同步方式GTID)總結

    這是之前做的筆記,整體有些凌亂,後續有時間再整理一下格式!!!! 非同步複製:在主節點寫入日誌即返回成功,預設情況下MySQL5.5/5.6/5.7和mariaDB10.0/10.1的複製功能是非

    MySQL5.7主從複製,基於GTID主從複製同步複製同步解析

    一、主從複製 1.環境 系統:redhat6.5 防火牆:保持關閉 selinux=disabled mysql主機:server1 172.25.32.4/24 mysql從機:server2 172.25.32.5/24 2.MySQL

    MYSQL 完全備份主從復制級聯復制同步

    -a 不返回 數據庫分離 rm -rf 是否 sin ice 備份數據庫 var mysql 完全備份 1,啟用二進制日誌,並於數據庫分離,單獨存放 vim /etc/my.cnf 添加 log_bin=/data/bin/mysql

    +++++++DNS基本工作原理DNS正反向解析主從同步

    博客 運維 linux dns基礎工作原理bind Berkerley Information Name DomainDNS Domain Name ServerTCP/UDP 53UDP 53 無連接協議,域名解析TCP 53 面向連接協議,區域傳送歷史IANA統一名字,自己hosts中維護(%

    Mysql實現數據庫主從復制主主復制同步復制

    mysql 數據庫復制 主主復制 主從復制 半同步復制 --------------Mysql實現數據庫主從復制架構----------------一、環境準備:centos系統服務器2臺、一臺用戶做Mysql主服務器,一臺用於做Mysql從服務器,配置好yum源、防火墻關閉、各節點時鐘服

    複習電商筆記-19-mysql主從複製接受和操作

      第五天:MySQL主從複製+Amoeba讀寫分離 思考: 序號 知識點 型別 難度係數 掌握程度  

    44mysql主從複製實戰

    主從複製的配置 軟體版本 1.雙方的MySQL要一致 2.如果不一致:主的要低於從的 從哪兒開始複製: 1.都從0開始 2.主伺服器已經執行一段時間,並且存在不小的資料集:把主伺服器備份,然後在從伺服器恢復,從主伺服器上備份處的位置開始複製 配置過程: 主伺服器: 1.改s

    45mysql主從複製應用擴充套件

    mysql主從複製應用擴充套件 1.主從伺服器的時間要同步(NTP) 建立一個時間伺服器 */5 * * * * /user/sbin/ntpdate ntpserver &> /dev/null 2.如何限制從伺服器只讀(配置在mysqld中) 在從伺服器上啟動read

    mysql主從複製實現資料庫同步

    1、Introduction 相信看過這篇文章的童鞋,都摩拳擦掌,躍躍一試了吧? 今天我們就來一次mysql主從同步實戰! 2、環境說明 os:ubuntu16.04 mysql:5.7.17 下面的實戰演練,都是基於上面的環境。當然,其他環境也大同小異。