概述mysql
Mycat可以實現數據庫讀寫分離,不能實現主從同步,數據庫的備份仍是基於數據庫層面的。Mycat只是數據庫的中間件;sql
Mycat讀寫分離配置數據庫
在MySQL中間件出現以前,對於MySQL主從集羣,若是要實現其讀寫分離,通常是在程序端實現,這樣就帶來一個問題,即數據庫和程序的耦合度過高,若是我數據庫的地址發生改變了,那麼我程序端也要進行相應的修改,若是數據庫不當心掛掉了,則同時也意味着程序的不可用,而這對不少應用來講,並不能接受。負載均衡
引入MySQL中間件能很好的對程序端和數據庫進行解耦,這樣,程序端只需關注數據庫中間件的地址,而無需知曉底層數據庫是如何提供服務。測試
做爲當前煊赫一時的MySQL中間件,MyCAT實現MySQL主從集羣的讀寫分離自是應有之義,其配置也至關簡單。url
在這裏,我用三個實例組成MySQL主從集羣,來驗證MyCAT的讀寫分離功能,其實,一主一從就能夠知足,之因此用三個,是爲了驗證MyCAT的分片功能。spa
集羣組成以下:code
角色 主機名 主機IPserver
master mysql-server1 192.168.244.145xml
slave mysql-server2 192.168.244.146
slave mysql-server3 192.168.244.144
在這裏,仍是使用Travelrecord表進行測試。
首先編輯MyCAT的配置文件schema.xml,關於dataHost的配置信息以下:
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="localhost:3306" user="root" password="123456"> </writeHost> <writeHost host="hostS1" url="192.168.244.146:3306" user="root" password="123456" /> <writeHost host="hostS2" url="192.168.244.144:3306" user="root" password="123456" /> </dataHost>
這裏面,有兩個參數須要注意,balance和 switchType。
其中,balance指的負載均衡類型,目前的取值有4種:
1. balance="0", 不開啓讀寫分離機制,全部讀操做都發送到當前可用的writeHost上。
2. balance="1",所有的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,而且M1與 M2互爲主備),正常狀況下,M2,S1,S2都參與select語句的負載均衡。
3. balance="2",全部讀操做都隨機的在writeHost、readhost上分發。
4. balance="3",全部讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力
switchType指的是切換的模式,目前的取值也有4種:
1. switchType='-1' 表示不自動切換
2. switchType='1' 默認值,表示自動切換
3. switchType='2' 基於MySQL主從同步的狀態決定是否切換,心跳語句爲 show slave status
4. switchType='3'基於MySQL galary cluster的切換機制(適合集羣)(1.4.1),心跳語句爲 show status like 'wsrep%'。