Mysql主從復制、半同步復制、並行復制


MySQL之間數據復制的基礎是二進制日志文件(binary log file)。一台MySQL數據庫一旦啟用二進制日志后,其作為master,它的數據庫中所有操作都會以“事件”的方式記錄在二進制日志中,其他數據庫作為slave通過一個I/O線程與主服務器保持通信,並監控master的二進制日志文件的變化,如果發現master二進制日志文件發生變化,則會把變化復制到自己的中繼日志中(relay_log),然后slave的一個SQL線程會把相關的“事件”執行到自己的數據庫中,以此實現從數據庫和主數據庫的一致性,也就實現了主從復制。
1.主數據庫(Master)將變更信息寫入到二進制日志文件中,這里需要注意的是舊版本的MySQL數據庫默認是不開啟二進制日志的,強烈建議在安裝好數據庫啟動之前一定要先檢查一下二進制日志文件是否開啟,即使不做主從復制架構也要開啟,否則當數據庫啟動之后再開啟二進制日志時需要重新啟動數據庫。

2.從數據庫(Slave)開啟一個IO工作線程,通過該IO線程與主數據庫建立一個普通客戶端連接,主數據庫會啟動一個二進制日志轉儲線程(binglog dump thread),從數據庫的IO線程通過這個轉儲線程讀取主庫上的變更事件,並將變更事件記錄到中繼日志中(relay_log),如果從數據庫的IO線程讀取速度追趕上主庫的事件變更,在沒有得到新變更的通知時,IO線程會進入Sleep狀態。

3.從數據庫還會啟動一個SQL Thread線程,這個線程從中繼日志(relay_log)中讀取變更事件,並將變更同步到從數據庫中。同時,可以通過配置選項,除了將變更存儲到數據庫中,也可以將變更事件同時存儲在從數據庫的二進制日志中
這里寫圖片描述

Master :server1 slave:server2
1.安裝數據庫:master和slave同樣的操作

2、mysql初始化配置
master和slave

這里寫圖片描述
安全初始化,並設置新的密碼

3.對master進行配置

為slave授權用戶

查看master狀態:

這里寫圖片描述
4.對slave進行配置

在slave添加master

這里寫圖片描述
5.測試:在master寫入數據在slave查看
master:

slave:
這里寫圖片描述
數據同步,主從設置成功

GTID (Global Transaction ID) 是對於一個已提交事務的編號,並且是一個全局唯一的編號。 GTID 實際上 是由 UUID+TID 組成的。其中 UUID 是一個 MySQL 實例的唯一標識。TID 代表了該實例上已經提交的事務數量,並且隨着事務提交單調遞增。

從 MySQL 5.6.5 開始新增了一種基於 GTID 的復制方式。通過 GTID 保證了每個在主庫上提交的事務在集群中有一個唯一的ID。這種方式強化了數據庫的主備一致性,故障恢復以及容錯能力。
在原來基於二進制日志的復制中,從庫需要告知主庫要從哪個偏移量進行增量同步,如果指定錯誤會造成數據的遺漏,從而造成數據的不一致。借助GTID,在發生主備切換的情況下,MySQL的其它從庫可以自動在新主庫上找到正確的復制位置,這大大簡化了復雜復制拓撲下集群的維護,也減少了人為設置復制位置發生誤操作的風險。另外,基於GTID的復制可以忽略已經執行過的事務,減少了數據發生不一致的風險。

master機的設置

slave機的設置

這里寫圖片描述

在master寫入數據

在slave查看
這里寫圖片描述

異步復制即是master數據庫把binlog日志發送給 slave數據庫,當slave服務器發生故障了,那么肯定會導致主從數據庫服務器的數據不一致。
為了解決上面的問題,MySQL5.5引入一種叫做半同步復制模式。開啟這種模式,可以保證slave數據庫接收完master數據庫發送過來的binlog日志並寫入自己的中繼日志中,然后反饋給master數據庫,告知已經復制完畢。
開啟這種模式后,當出現超時,主數據庫將會自動轉為異步復制模式,直到至少有一台從服務器接受到主數據庫的binlog,並且反饋給主數據庫。這時主數據庫才會切換回半同步復制模式
這里寫圖片描述

master:

系統變量反映了半同步復制是如何配置的。若要檢查它們的值,請使用
這里寫圖片描述
狀態變量能夠監視半同步復制的操作。若要檢查它們的值,請使用
這里寫圖片描述
slave:

查看半同步復制變量和它們的狀態:

這里寫圖片描述

這里寫圖片描述

master機寫入數據,並接受到slave機返回的ack值

這里寫圖片描述

將slave機的io線程停掉,master機寫入數據,會默認等待10s,如果超時還未等到slave機的ack,將自動切換到異步復制,如果slave機的io線程再次開啟,復制將自動切換到半同步方式廣州英語培訓
slave:

然后在master上執行數據庫操作,比如插入等,結果就是操作會等待10s返回結果,這時候退回異步復制,slave上沒有接收到數據,這時候我們去查看master上的相關狀態:
master:

這里寫圖片描述
數據並未同步slave
這里寫圖片描述

然后我們開啟io_thread再去查看數據庫的變化,發現數據同步了
這里寫圖片描述

1.查看進程表

這里寫圖片描述
2.對my.cnf進行配置

3.再次登錄查看進程列表

這里寫圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM