更新時間:2020-09-08 14:44:51 來源:動力節點 瀏覽1708次
在實際的生產環境中,如果對mysql數據庫的讀和寫都在一臺數據庫服務器中操作,無論是在安全性、高可用性,還是高并發等各個方面都是不能滿足實際需求的。因此,一般通過主從復制的方式來同步數據,再通過讀寫分離來提升數據庫的并發負載能力。
Mysql主從復制和讀寫分離
一,主從復制:
Mysql的主從復制和mysql的讀寫分離兩者有緊密的聯系,首先要部署主從復制,只有主從復制完成了,才能再此基礎上進行數據的讀寫分離。
Mysql支持的復制類型:
1、基于語句的復制:在主服務器上執行的sql語句,在從服務器上會執行同樣的語句。Mysql默認采用基于語句的復制,效率比較高,但是有時不能實現精準復制。
2,基于行的復制:把改變的內容復制過去,而不是把命令在從服務器上執行一遍。
3、混合類型的復制:默認采用基于語句的復制,一旦發現基于語句的復制不能精準復制時,就會采用基于行的復制。
二,主從復制過程:
1、在每個事物更新數據完成之前,master在二進制日志記錄這些改變,寫入二進制日志完成后,master通知存儲引擎提交事物。
2、Slave將master的binary log復制到其中的中繼日志。首先從mysql服務器開始一個工作線程I/O線程,I/O線程在master上打開一個普通的連接,然后開始binlog dump process。Binlog dump process從master的二進制日志中讀取事件,如果已經跟上master。他會睡眠并等待master產生新的事件。I/O線程將這些事件寫入中繼日志。
3、Sql從線程處理該過程的最后一步。Sql線程從中繼日志中讀取事件,并重放其中的事件而更新slave的數據,使其與master的數據一致。
三、讀寫分離
簡單的來說,讀寫分離就是只在mysql主服務器上寫,只在mysql從服務器上讀?;驹硎亲屩鲾祿焯幚硎聞招圆樵儯鴱臄祿焯幚韘elect查詢。數據庫復制被用來把事務性查詢導致的變更同步到集群中的數據庫。
目前較為常見的mysql讀寫分離有兩種:
1、基于程序代碼的內部實現
在代碼中根據select、insert進行路由分類,這類方法也是目前生產環境中較為常用的,優點是性能較好,因為在程序代碼中實現,不需要增加額外的設備作為硬件開支;缺點是需要研發人員來實現,運維人員無從下手。
2、基于中間代理層實現
代理一般位于客戶端和服務器之間,代理服務器接收到客戶端請求后通過判斷后轉發到后端數據庫。如下有兩個常用代理:
Mysql-proxy:其為mysql的開源項目,通過其自帶的lua腳本進行sql判斷,雖然是mysql官方產品,但是mysql官方并不建議其使用到生產環境中。
Amoeba:由陳思儒開發,該程序由Java語言進行開發。這個軟件致力于mysql的分布式數據庫前端代理層,它主要為應用層訪問mysql的時候充當sql路由功能。Amoeba能夠完成多數據源的高可用、負載均衡、數據切片等功能。
以上就是mysql主從復制與讀寫分離的詳解介紹,更多資料大家可以在動力節點官網的Java技術文檔中查找。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習