1. 程式人生 > >mysql主從複製介紹

mysql主從複製介紹

Mysql支援單項、雙向、鏈式級聯、實時、非同步複製,在複製過程中,一臺伺服器充當主伺服器(master),另一個或多個其他的伺服器充當從伺服器(lave)。

複製可以是單向:M-->S,也可以是雙向M<-->M,也可以多M環狀同步等,不推薦雙向、環狀和多主一從複製方式

如果設定了鏈式級聯複製類似A-->B-->C-->D,那麼從伺服器還會充當其下面從伺服器的主伺服器

 

 

主從複製有利於資料庫架構的健壯性、提升訪問速度、易於維護管理。

1.主從伺服器互為備份

當主伺服器出現問題時,可以人工或自動切換到從伺服器,參考資料

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

① 掛到從庫上,如果主庫可以連上則將binlog拉到從庫上,將從庫的資料補到與主庫一致(從庫只備份)

② 雙寫,即寫同時在主庫和從庫,壓力會較大

③ 通過應用程式寫一個1min的短時日誌,恢復從庫

④ 把非同步同步換成實時同步(谷歌開發的一個半同步外掛,主庫和從庫同時寫成功才算成功,從庫預設等待時間10s)

適用於非人為的硬體、服務故障,對於人為的誤操作無能為力

2.主從伺服器讀寫分離分擔壓力

主從伺服器架構可通過程式(PHP、JAVA)或代理軟體對客戶端的請求實現讀寫分離,即主伺服器進行update、delete等更新操作,從伺服器提供select查詢操作,保持實時同步,降低主庫同時讀和寫的壓力

中大型公司:PHP、JAVA

測試環境:代理軟體(mysql-proxy、amoeba)

入口網站:分散式deproxy(百度、阿里讀寫分離,hash負載均衡,健康檢查)

3.根據伺服器拆分業務

把幾個不同的從伺服器根據公司的業務進行拆分,例如有為外部使用者提供查詢的,有DBA用來進行備份的,還有提供公司內部人員訪問的後臺、指令碼、日誌分析及開發人員服務的

 

 

主從同步要求

在從庫開啟同步之前,要將同步位置點之前的主庫資料灌到從庫上,保證同步位置點之前主庫與從庫的資料一致;在主庫上建立專門用於從庫同步的專屬賬號;主庫需要開啟binlog。

主從同步原理

主庫:一個IO執行緒,開啟binlog

從庫:一個IO執行緒,一個sql執行緒

同步是從庫主動去找主庫

在從上配置change master to master_host=’ ’,master_port=’ ’,master_user=’ ’,master_passwod= ’’,master_log_file=’ ’,master_log_pos=      ;start slave

 

首先,從庫的sql程序開始工作,IO執行緒向主庫發起請求

主庫對從庫的主機、埠、使用者等進行驗證,判斷是否允許連線

允許連線後,主庫從從庫指定的日誌位置點開始給從庫傳送binlog,併發送此次之後主庫端新的binlog檔名稱以及下一個指定更新位置

從庫收到binlog後,IO執行緒將其寫入relay-log.00000n,即中繼日誌

從庫的sql執行緒實時檢測中繼日誌的變化,如果發生變化就會讀取日誌,解析後形成sql在從庫端執行寫入從庫,並將最後讀取的檔名和位置記錄到relay-log.info

從庫的IO執行緒更新master.info,將最後取到的binlog檔名和位置點寫入