配置MyCat讀寫分類前須要先配置MySQL的主從複製,參考我上一篇的文章,已經作了比較詳細地講解了。node
centos七、MySQL5.七、mycat1.6mysql
MyCat做爲數據庫的中間件,對於上層應用來講,他就是一個數據庫。所以須要配置數據庫的用戶名,密碼,數據庫名,以及讀寫權限。sql
下面是MyCat的默認配置(部分):數據庫
server.xmlcentos
user節點配置用戶信息,詳細說明以下:bash
user 用戶配置節點服務器
--name 登陸的用戶名,也就是鏈接Mycat的用戶名app
--password 登陸的密碼,也就是鏈接Mycat的密碼負載均衡
--schemas 數據庫名,這裏會和schema.xml中的配置關聯,多個用逗號分開,例如須要這個用戶須要管理兩個數據庫db1,db2,則配置db1,dbsui
我這裏修改以下(只須要改動user節點信息便可):
<user name="root">
<property name="password">123456</property>
<property name="schemas">db_test</property>
</user>
複製代碼
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 數據庫配置,與server.xml中的數據庫對應 -->
<schema name="db_test" checkSQLschema="false" sqlMaxLimit="100" dataNode="db_node"></schema>
<!-- 分片配置 -->
<dataNode name="db_node" dataHost="db_host" database="db_test" />
<!-- 物理數據庫配置 -->
<dataHost name="db_host" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="mysql_master:3306" user="root"
password="apple">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="mysql_slaver:3306" user="root" password="apple" />
</writeHost>
</dataHost>
</mycat:schema>
複製代碼
這裏有幾個配置須要說明下:
sqlMaxLimit配置默認查詢數量
database爲真實數據庫名
balance="0", 不開啓讀寫分離機制,全部讀操做都發送到當前可用的writeHost 上。
balance="1",所有的 readHost 與 stand by writeHost 參與 select 語句的負載均衡,簡單的說,當雙主雙從模式(M1 ->S1 , M2->S2,而且 M1 與 M2 互爲主備),正常狀況下, M2,S1,S2 都參與 select 語句的負載均衡。
balance="2",全部讀操做都隨機的在 writeHost、 readhost 上分發。
balance="3", 全部讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓力,注意 balance=3 只在 1.4 及其之後版本有, 1.3 沒有。
writeType="0", 全部寫操做發送到配置的第一個 writeHost,第一個掛了切到還生存的第二個writeHost,從新啓動後已切換後的爲準,切換記錄在配置文件中:dnindex.properties .
writeType="1",全部寫操做都隨機的發送到配置的 writeHost。
writeType="2",沒實現。
-1 表示不自動切換
1 默認值,自動切換
2 基於MySQL 主從同步的狀態決定是否切換
複製代碼
在mycat所在的服務器啓動
./mycat start
mysql -uroot -p123456 -P8066 -h127.0.0.1
#stop
./mycat stop
複製代碼
連上以後跟普通的MySQL如出一轍
在外網 (相對虛擬機而言)訪問mycat,須要配置ip白名單。
配置文件在server.xml中
<!-- 全局SQL防火牆設置 -->
<firewall>
<whitehost>
<host host="192.168.74.1" user="root"/>
<host host="127.0.0.1" user="root"/>
</whitehost>
<blacklist check="false">
</blacklist>
l</firewall>
複製代碼
這裏192.168.74.1爲我本機相對虛擬機的ip地址,這裏要說明下,若是配置了ip白名單,則127.0.0.1也是要加上才能本地訪問的,否則會被拒絕掉。
示例
這裏的common是我本地在host文件裏設置了映射到mycat所在虛擬機的ip。
這裏能夠經過在mycat中插入數據檢測是否主從複製配置成功,經過修改從數據庫的數據來驗證是否讀寫進行分離。
結果
能夠看到,mycat讀取的是從庫的數據 。這說明了,mycat讀寫分離功能已經實現了。