mycat就至關於一個調度器,具備數據庫分片功能,自己不存儲數據, 其功能是對後端的真實數據庫的數據,進行數據劃分和數據整合,方便管理mysql
如今讓咱們經過mycat實現數據庫的讀寫分離sql
本實驗中其餘配置文件,參見 基於mysql的主從複製之Mycat簡單配置和高可用數據庫
vim schema.xml
vim
19 <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
20 rule="sharding-by-intfile" />
43 <dataHost name="server33.lalala.com" maxCon="1000" minCon="10" balance="1"
44 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
45 <heartbeat>select user()</heartbeat>
46 <!-- can have multi write hosts -->
47 <writeHost host="hostM1" url="server33.lalala.com:3306" user="mycat"
48 password="Mycat+007">
49 <!-- can have multi read hosts -->
50
51 <readHost host="hostS1" url="server55.lalala.com:3306" user="mycat"
52 password="Mycat+007">
53 </readHost> <!-- can have multi read hosts -->
54 <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
55 </writeHost>
56 </dataHost>
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
參數說明:後端
balance=」1″ writeType=」0″ switchType=」1″
負載均衡
balance
ide
一、balance=0 不開啓讀寫分離機制,全部讀操做都發送到當前可用的writehostle .
url
二、balance=1 所有的readhost與stand by writeHost 參與select語句的負載均衡。簡單的說,雙主雙從模式(M1àS1,M2àS2,而且M1和M2互爲主備),正常狀況下,M1,S1,S2都參與select語句的複雜均衡。
spa
三、balance=2 全部讀操做都隨機的在readhost和writehost上分發
線程
writeType
負載均衡類型,目前的取值有3種:
一、writeType=」0″, 全部寫操做發送到配置的第一個writeHost。
二、writeType=」1″,全部寫操做都隨機的發送到配置的writeHost。
三、writeType=」2″,不執行寫操做。
switchType
一、switchType=-1 表示不自動切換
二、switchType=1 默認值,自動切換
三、switchType=2 基於MySQL 主從同步的狀態決定是否切換
vim server.xml
80 <user name="mycat">
81 <property name="password">Mycat+007</property>
82 <property name="schemas">JamesMycatSchema</property>
83
84 <!-- 表級 DML 權限設置 -->
85 <!--
86 <privileges check="false">
87 <schema name="TESTDB" dml="0110" >
88 <table name="tb01" dml="0000"></table>
89 <table name="tb02" dml="1111"></table>
90 </schema>
91 </privileges>
92 -->
93 </user>
94
95 <user name="mycat_r">
96 <property name="password">cat</property>
97 <property name="schemas">JamesMycatSchema</property>
98 <property name="readOnly">true</property>
99
100 </user>
(由於咱們要作讀寫分離,因此數據庫的同步,會對實驗形成干擾)
mysql>stop slave sql_thread;
mysql -umycat -pMycat+007 -h172.25.88.33 -P8066
插入以後再讀取,也沒有看見剛剛插入的id=5
在master(server33)的mysql數據庫登錄,db1數據庫中查詢到了剛剛插入的數據,因此寫操做是在master(server33)執行的.
slave(server44)的SQL線程被關閉了,因此slave(server44)的db1也沒有id=5的數據
至此讀寫分離圓滿成功~~~~~