MySQL Proxy 實現 MySQL 讀寫分離提升併發負載

工做拓撲:html

110018378.jpg

MySQL Proxy有一項強大功能是實現「讀寫分離」,基本原理是讓主數據庫處理寫方面事務,讓從庫處理SELECT查詢。mysql

Amoeba for MySQL是一款優秀的中間件軟件,一樣能夠實現讀寫分離,負載均衡等功能,而且穩定性也高於MySQL Proxy,有興趣的能夠測試一下。linux

環境描述:git

  • 操做系統:CentOS6.3_x64
  • 主服務器Master:192.168.0.202
  • 從服務器Slave:192.168.0.203
  • 調度服務器MySQL-Proxy:192.168.0.204

1、mysql主從複製github

工做原理圖:sql

105353509.jpg

主從複製的原理:數據庫

分爲同步複製和異步複製,實際複製架構中大部分爲異步複製。 複製的基本過程以下:後端

1).Slave上面的IO進程鏈接上Master,並請求從指定日誌文件的指定位置(或者從最開始的日誌)以後的日誌內容;服務器

2).Master接收到來自Slave的IO進程的請求後,經過負責複製的IO進程根據請求信息讀取制定日誌指定位置以後的日誌信息,返回給Slave 的IO進程。返回信息中除了日誌所包含的信息以外,還包括本次返回的信息已經到Master端的bin-log文件的名稱以及bin-log的位置;架構

3).Slave的IO進程接收到信息後,將接收到的日誌內容依次添加到Slave端的relay-log文件的最末端,並將讀取到的Master端的 bin-log的文件名和位置記錄到master-info文件中,以便在下一次讀取的時候可以清楚的告訴Master「我須要從某個bin-log的哪一個位置開始日後的日誌內容,請發給我」;

4).Slave的Sql進程檢測到relay-log中新增長了內容後,會立刻解析relay-log的內容成爲在Master端真實執行時候的那些可執行的內容,並在自身執行。

環境描述

  • 操做系統:CentOS6.3_x64
  • 主服務器master:192.168.0.202
  • 從服務器slave:192.168.0.203

1、mysql主從複製

一、主從安裝mysql,版本一致

咱們裝的是 mysql-5.5.30.tar.gz 這裏省略…

二、修改master,slave服務器

三、重啓主從服務器mysql

四、在主服務器上創建賬戶並受權slave

五、查看主數據庫狀態

六、配置從數據庫

七、啓動slave同步進程並查看狀態

103403849.jpg

其中Slave_IO_Running 與 Slave_SQL_Running 的值都必須爲YES,才代表狀態正常。

八、驗證主從同步

在主mysql建立數據庫abc,再從mysql查看已經同步成功!

在slave啓動報錯:

「Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’」

解決:報錯的緣由主要是slave設置master的二進制文件名或pos值不對應!

先flush logs;清空日誌,在查看下主數據庫的狀態 show master status;看下日誌文件名字和position值;

再在slave中,執行:CHANGE MASTER TO MASTER_LOG_FILE=‘二進制日誌名’,MASTER_LOG_POS=值;

最後啓動同步進程:start slave;

2、mysql-proxy實現讀寫分離

一、安裝mysql-proxy

實現讀寫分離是有lua腳本實現的,如今mysql-proxy裏面已經集成,無需再安裝

下載:http://dev.mysql.com/downloads/mysql-proxy/

二、配置mysql-proxy,建立主配置文件

三、修改讀寫分離配置文件

四、啓動mysql-proxy

五、測試讀寫分離

1>.在主服務器建立proxy用戶用於mysql-proxy使用,從服務器也會同步這個操做

2>.使用客戶端鏈接mysql-proxy

建立數據庫和表,這時的數據只寫入主mysql,而後再同步從slave,能夠先把slave的關了,看能不能寫入,這裏我就不測試了,下面測試下讀的數據!

3>.登錄主從mysq查看新寫入的數據以下,

4>.再登錄到mysql-proxy,查詢數據,看出能正常查詢

5>.登錄從服務器關閉mysql同步進程,這時再登錄mysql-proxy確定會查詢不出數據

6>.登錄mysql-proxy查詢數據,下面看來,能看到表,查詢不出數據

配置成功!真正實現了讀寫分離的效果!

 

 

來源http://www.cnblogs.com/luckcs/articles/2543607.html

相關文章
相關標籤/搜索