Mysql主從復制和讀寫分離


Mysql主從復制和讀寫分離

在實際的生產環境中,如果對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從服務器上讀。基本原理是讓主數據庫處理事務性查詢,而從數據庫處理select查詢。數據庫復制被用來把事務性查詢導致的變更同步到集群中的數據庫。

 

 

 

目前較為常見的mysql讀寫分離有兩種:

1、 基於程序代碼的內部實現

在代碼中根據select、insert進行路由分類,這類方法也是目前生產環境中較為常用的,優點是性能較好,因為在程序代碼中實現,不需要增加額外的設備作為硬件開支;缺點是需要研發人員來實現,運維人員無從下手。

2、 基於中間代理層實現

代理一般位於客戶端和服務器之間,代理服務器接收到客戶端請求后通過判斷后轉發到后端數據庫。如下有兩個常用代理:

Mysql-proxy:其為mysql的開源項目,通過其自帶的lua腳本進行sql判斷,雖然是mysql官方產品,但是mysql官方並不建議其使用到生產環境中。

Amoeba:由陳思儒開發,該程序由Java語言進行開發。這個軟件致力於mysql的分布式數據庫前端代理層,它主要為應用層訪問mysql的時候充當sql路由功能。Amoeba能夠完成多數據源的高可用、負載均衡、數據切片等功能。

 

 

常用mysql連接工具:

 

phpMyAdmin

phpMyAdmin是我們常用的MySQL管理工具之一,它是用PHP開發的基於Web方式架構在網站主機上的MySQL管理工具,支持中文,管理數據庫也十分方便。主要缺點在對大數據庫的備份和恢復不是十分方便。

Navicat

Navicat是一款桌面版MySQL管理工具,它和微軟的SQLServer的管理器很像,簡單易用。Navicat的優勢在於使用圖形化的用戶界面,可以讓用戶管理更加輕松。


免責聲明!

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



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