您好,登錄后才能下訂單哦!
mysql復制的優點: 1、數據分布 2、數據備份 3、負載均衡 4、提示高可用性
mysql/slave
master/slave較為簡單,master負責響應客戶端的寫請求,slave負責響應客戶端的讀請求
實現原理:
slave在啟動兩個線程,i/o線程和sql線程,master啟動dump線程,每當master的數據發生改變時,master就會將對應的SQL語句存儲在二進制日志文件中,slave的通過i/o線程連接master的dump線程并每個一段時間就會向master詢問二進制文件是否發生改變,如果二進制文件發生改變slave的i/o線程就會去讀取二進制文件中發生改變的內容存儲在本地的中繼日志中并通過sql線程對中繼日志的內容進行回放,并記錄本次讀取到的二進制文件位置,完成復制。
存在問題:
1、master壓力過大
2、master宕機之后將無法完成用戶寫請求
3、節點數據可能不一致
4、默認使用異步復制方式
5、延遲
延遲的原因:
1、 slave節點過多,master會為每個slave打開一個dump線程
2、 并發寫請求操作,由于mysql支持并發請求,如果多個寫請求同時到達,將會將這些寫操作都記錄在二進制日志中,但在寫入二進制文件時只能通過串行寫入
3、 slave通過i/o線程讀取二進制文件并寫入中繼日志是也只能通過串行寫入
master/master
master/master的出現正好解決了master/slave中如果master宕機之后用戶的寫請求無法完成的問題,但同時引入了比master/slave更多的問題,實現原理基本和master/slave相同,只需要在兩臺master中分別啟動二進制日志和中繼日志即可
注意問題:
1、 避免主鍵重復
2、 server-id全局唯一
存在問題:
1、 經常出現兩臺master數據不一致(存在巨大風險)
2、 主鍵沖突
3、 延遲
級聯復制
在有些應用場景中,可能讀寫壓力差別比較大,讀壓力特別的大,一個Master可能需要上10臺甚至更多的Slave才能夠支撐注讀的壓力。這時候,Master就會比較吃力了,因為僅僅連上來的SlaveIO線程就比較多了,這樣寫的壓力稍微大一點的時候,Master端因為復制就會消耗較多的資源,很容易造成復制的延時。這時候我們就可以利用MySQL可以在Slave端記錄復制所產生變更的BinaryLog信息的功能,也就是打開log_slave_update選項。然后,通過二級(或者是更多級別)復制來減少Master端因為復制所帶來的壓力。
這種多層級聯復制的架構,很容易就解決了Master端因為附屬Slave太多而成為瓶頸的風險。
但下面階級過多同一個變更傳到最底層的Slave所需要經過的MySQL也會更多,同樣可能造成延時較長的風險
存在問題:
1、可能導致延遲更為嚴重
2、借助于BlackHole存儲引擎(黑洞引擎)
半同步復制
mysql復制方式:
異步:將二進制日志發送給slave不等待slave回應直接返回給客戶端,數據儲存成功
同步:將二進制日志發送給slave等待所有slave回應執行成功后返回給客戶端,數據儲存成功
半同步:將二進制日志發送給slave等待一個slave回應執行成功后返回給客戶端,數據儲存成功
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。