Centos6 安裝mysql5.6 實現主從複製/主主複製環境虛擬機下載

本博主配置好的Centos6 安裝mysql5.6 實現主從複製/主主複製環境虛擬機下載,鏈接:https://pan.baidu.com/s/1YYS13pSxidzNwjlC-PiGng
提取碼:npea 下載好,用Vmware Workstaion打開,即可以正常使用

Mysql複製概念
Mysql內建的複製功能是構建大型高性能應用程序的基礎, 將Mysql數據分佈到多個系統上,這種分佈機制是通過將Mysql某一台主機數據複製到其它主機(slaves)上,並重新執行一遍來實現的。複製過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,然後封鎖並等待主服務器通知新的更新。

Mysql支持哪些複製
–  基於語句的複製: 在主服務器執行SQL語句,在從服務器執行同樣語句。MySQL默認採用基於語句的複製,效率較高。一旦發現沒法精確複製時, 會自動選基於行的複製。
–  基於行的複製: 把改變的內容複製過去,而不是把命令在從服務器上執行一遍. 從mysql5.0開始支持
–  混合類型的複製: 默認採用基於語句的複製,一旦發現基於語句的無法精確的複製時,就會採用基於行的複製。

Mysql複製解決的問題
–  數據分佈 (Data distribution )
–  負載平衡(load balancing)
–  據備份(Backups) ,保證數據安全
–  高可用性和容錯行(High availability and failover)
–  實現讀寫分離,緩解數據庫壓力

Mysql主從複製原理
master服務器將數據的改變都記錄到二進制binlog日誌中,只要master上的數據發生改變,則將其改變寫入二進制日誌;salve服務器會在一定時間間隔內對master二進制日誌進行探測其是否發生改變,如果發生改變,則開始一個I/O Thread請求master二進制事件,同時主節點為每個I/O線程啟動一個dump線程,用於向其發送二進制事件,並保存至從節點本地的中繼日誌中,從節點將啟動SQL線程從中繼日誌中讀取二進制日誌,在本地重放,使得其數據和主節點的保持一致,最後I/O Thread和SQL Thread將進入睡眠狀態,等待下一次被喚醒。

需要理解:
–  從庫會生成兩個線程,一個I/O線程,一個SQL線程;
–  I/O線程會去請求主庫的binlog,並將得到的binlog寫到本地的relay-log(中繼日誌)文件中;
–  主庫會生成一個log dump線程,用來給從庫I/O線程傳binlog;
–  SQL線程,會讀取relay log文件中的日誌,並解析成sql語句逐一執行;

這裡注意幾點:
–  master將操作語句記錄到binlog日誌中,然後授予slave遠程連接的權限(master要開啟binlog二進制日誌功能;通常為了數據安全考慮,slave也開啟binlog);
–  slave開啟兩個線程:IO線程和SQL線程。其中:IO線程負責讀取master的binlog內容到中繼日誌relay log里;SQL線程負責從relay log日誌里讀出binlog內容,並更新到slave的數據庫里,這樣就能保證slave數據和master數據保持一致了;
–  mysql複製至少需要兩個Mysql的服務,當然Mysql服務可以分佈在不同的服務器上,也可以在一台服務器上啟動多個服務;
–  mysql複製最好確保master和slave服務器上的Mysql版本相同(如果不能滿足版本一致,那麼要保證master主節點的版本低於slave從節點的版本);
–  master和slave兩節點間時間需同步;

Mysql複製流程圖

如上圖所示:
–  Mysql複製過程的第一部分就是master記錄二進制日誌。在每個事務更新數據完成之前,master在二日誌記錄這些改變。MySQL將事務串行的寫入二進制日誌,即使事務中的  語句都是交叉執行的。在事件寫入二進制日誌完成後,master通知存儲引擎提交事務;
–  第二部分就是slave將master的binary log拷貝到它自己的中繼日誌。首先,slave開始一個工作線程(I/O線程)。I/O線程在master上打開一個普通的連接,然後開始binlog dump process。Binlog dump process從master的二進制日誌中讀取事件,如果已經跟上master,它會睡眠並等待master產生新的事件。I/O線程將這些事件寫入中繼日誌;
–  SQL slave thread(SQL從線程)處理該過程的最後一步。SQL線程從中繼日誌讀取事件,並重放其中的事件而更新slave的數據,使其與master中的數據一致。只要該線程與  I/O線程保持一致,中繼日誌通常會位於OS的緩存中,所以中繼日誌的開銷很小;
–  此外,在master中也有一個工作線程:和其它MySQL的連接一樣,slave在master中打開一個連接也會使得master開始一個線程。複製過程有一個很重要的限制, 即複製在slave上是串行化的,也就是說master上的並行更新操作不能在slave上並行操作。

Mysql複製方案
主從複製: 主庫授權從庫遠程連接,讀取binlog日誌並更新到本地數據庫的過程;主庫寫數據後,從庫會自動同步過來(從庫跟着主庫變);
主主複製: 主從相互授權連接,讀取對方binlog日誌並更新到本地數據庫的過程;只要對方數據改變,自己就跟着改變;

本博主配置好的Centos6 安裝mysql5.6 實現主從複製/主主複製環境虛擬機下載,鏈接:https://pan.baidu.com/s/1YYS13pSxidzNwjlC-PiGng
提取碼:npea 下載好,用Vmware Workstaion打開,即可以正常使用

Mysql主從複製優點
在從服務器可以執行查詢工作(即我們常說的讀功能),降低主服務器壓力;(主庫寫,從庫讀,降壓)
在從主服務器進行備份,避免備份期間影響主服務器服務;(確保數據安全)
當主服務器出現問題時,可以切換到從服務器。(提升性能)

Mysql主從複製工作流程關鍵細節
1) MySQL支持單向、異步複製,複製過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。MySQL複製基於主服務器在二進制日誌中跟蹤所有對數據庫的更改(更新、刪除等等)。因此,要進行複製,必須在主服務器上啟用二進制日誌。每個從服務器從主服務器接收主服務器上已經記錄到其二進制日誌的保存的更新。當一個從服務器連接主服務器時,它通知主服務器定位到從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,並在本機上執行相同的更新。然後封鎖並等待主服務器通知新的更新。從服務器執行備份不會干擾主服務器,在備份過程中主服務器可以繼續處理更新。

2) MySQL使用3個線程來執行複製功能,其中兩個線程(Sql線程和IO線程)在從服務器,另外一個線程(IO線程)在主服務器。當發出START SLAVE時,從服務器創建一個I/O線程,以連接主服務器並讓它發送記錄在其二進制日誌中的語句。主服務器創建一個線程將二進制日誌中的內容發送到從服務器。該線程可以即為主服務器上SHOW PROCESSLIST的輸出中的Binlog Dump線程。從服務器I/O線程讀取主服務器Binlog Dump線程發送的內容並將該數據拷貝到從服務器數據目錄中的本地文件中,即中繼日誌。第3個線程是SQL線程,由從服務器創建,用於讀取中繼日誌並執行日誌中包含的更新。在從服務器上,讀取和執行更新語句被分成兩個獨立的任務。當從服務器啟動時,其I/O線程可以很快地從主服務器索取所有二進制日誌內容,即使SQL線程執行更新的遠遠滯後。

mysql 主從複製注意事項小結 

Mysql主從數據完成同步的過程
1) 在Slave 服務器上執行sart slave命令開啟主從複製開關,開始進行主從複製。
2) 此時,Slave服務器的IO線程會通過在master上已經授權的複製用戶權限請求連接master服務器,並請求從執行binlog日誌文件的指定位置(日誌文件名和位置就是在配置主從複製服務時執行change master命令指定的)之後開始發送binlog日誌內容

本博主配置好的Centos6 安裝mysql5.6 實現主從複製/主主複製環境虛擬機下載,鏈接:https://pan.baidu.com/s/1YYS13pSxidzNwjlC-PiGng
提取碼:npea 下載好,用Vmware Workstaion打開,即可以正常使用
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中記錄當前應用中繼日誌的文件名和位置點.

主從複製條件
–  開啟Binlog功能
–  主庫要建立賬號
–  從庫要配置master.info (CHANGE MASTER to…相當於配置密碼文件和Master的相關信息)
–  start slave 開啟複製功能

主從複製時需要理解
–  3個線程,主庫IO,從庫IO和SQL及作用
–  master.info(從庫)作用
–  relay-log 作用
–  異步複製
–  binlog作用 (如果需要級聯需要開啟Binlog)

主從複製時注意事項
–  主從複製是異步邏輯的SQL語句級的複製
–  複製時,主庫有一個I/O線程,從庫有兩個線程,I/O和SQL線程
–  實現主從複製的必要條件是主庫要開啟記錄binlog功能
–  作為複製的所有Mysql節點的server-id都不能相同
–  binlog文件只記錄對數據庫有更改的SQL語句(來自主庫內容的變更),不記錄任何查詢(select,show)語句。

主主複製實現過程記錄

根據上面的主從環境部署,master和slave已經實現同步,即在master上寫入新數據,自動同步到slave。而從庫只能讀不能寫,一旦從庫有寫入數據,就會造成主從數據不一致!
下面就說下Mysql主主複製環境,在slave上更新數據時,master也能自動同步過來。
—————————————————————————
溫馨提示:
在做主主同步前,提醒下需要特別注意的一個問題:
主主複製和主從複製有一些區別,因為多主中都可以對服務器有寫權限,所以設計到自增長重複問題,例如:
出現的問題(多主自增長ID重複)
1)首先在A和B兩個庫上創建test表結構;
2)停掉A,在B上對數據表test(存在自增長屬性的ID字段)執行插入操作,返回插入ID為1;
3)然後停掉B,在A上對數據表test(存在自增長屬性的ID字段)執行插入操作,返回的插入ID也是1;
4)然後 同時啟動A,B,就會出現主鍵ID重複

解決方法:
只要保證兩台服務器上的數據庫里插入的自增長數據不同就可以了
如:A插入奇數ID,B插入偶數ID,當然如果服務器多的話,還可以自定義算法,只要不同就可以了
在下面例子中,在兩台主主服務器上加入參數,以實現奇偶插入!
記住:在做主主同步時需要設置自增長的兩個相關配置,如下:
auto_increment_offset 表示自增長字段從那個數開始,取值範圍是1 .. 65535。這個就是序號。如果有n台mysql機器,則從第一台開始分為設1,2…n
auto_increment_increment 表示自增長字段每次遞增的量,其默認值是1,取值範圍是1 .. 65535。如果有n台mysql機器,這個值就設置為n。

在主主同步配置時,需要將兩台服務器的:
auto_increment_increment 增長量都配置為2
auto_increment_offset 分別配置為1和2。這是序號,第一台從1開始,第二台就是2,以此類推!這樣效果就是:master的數據id是1,3,5,7…, slave的數據id是2,4,6,8….
這樣才可以避免兩台服務器同時做更新時自增長字段的值之間發生衝突。(針對的是有自增長屬性的字段)

本博主配置好的Centos6 安裝mysql5.6 實現主從複製/主主複製環境虛擬機下載,鏈接:https://pan.baidu.com/s/1YYS13pSxidzNwjlC-PiGng
提取碼:npea 下載好,用Vmware Workstaion打開,即可以正常使用

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營