修改之前備份schema.xml
1、作用
schema用于配置邏輯庫。
2、 配置說明
只做讀寫分離,不做分庫分表,Mycat只是幫我們轉發一下請求,讀轉發到從庫,寫轉發到主庫,則schema標簽里面不用配置table。
給schema標簽加上屬性dataNode,配置dataNode的名字(name)。
3、最終配置如下
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
配置dataNode
1、 作用
dataNode定義了Mycat中的數據節點,也就是我們通常說所的數據分片,一個dataNode標簽就是一個獨立的數據分片,通俗理解,一個分片就是一個物理數據庫
2、 配置說明
● name
定義數據節點的名字,這個名字需要是唯一的,這個名字在schema里面會使用到;
● dataHost
用于定義該分片屬于哪個數據庫實例的,屬性值是引用dataHost標簽上定義的name屬性。
● database
用于對應真實的數據庫名,必須是真實存在的;
3、最終配置如下
<dataNode name="dn1" dataHost="localhost1" database="test" />
配置dataHost
1、作用
定義具體的數據庫實例、讀寫分離配置和心跳語句;
2、配置說明
● balance屬性
負載均衡類型,目前的取值有4種:
①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設置為1
● writeType
已過時,1.6版本就不用了。
● switchType屬性
用于指定主服務器發生故障后的切換類型。
-1 表示不自動切換
①默認值,自動切換(推薦)
②基于MySQL主從同步的狀態決定是否切換
③基于MySQL galary cluster的切換機制(適合集群)(1.4.1)
通常情況下,我們MySQL采用雙主雙從的模式下,switchType為1即可。因為雙主從模式下,主從同步關系很復雜,不能根據MySQL的狀態來切換。只需要在一個主出問題后,切換到另外的主。
● heartbeat標簽
用于和后端數據庫進行心跳檢查的語句,檢測MySQL數據庫是否正常運行。
當switchType為1時,mysql心跳檢查語句是select user()。
當switchType為2時,mysql心跳檢查語句是show slave status。
當switchType為3時,mysql心跳檢查語句是show status like 'wsrep%'。
● writeHost與readHost標簽
這兩個標簽都指定后端數據庫的相關配置給mycat,用于實例化后端連接池。唯一不同的是,writeHost指定寫實例、readHost指定讀實例,組合這些讀寫實例來滿足系統的要求。
在一個dataHost內可以定義多個writeHost和readHost。但是,如果writeHost指定的后端數據庫宕機,那么這個writeHost綁定的所有readHost都將不可用。另一方面,由于這個writeHost宕機系統會自動的檢測到,并切換到備用的writeHost上去。
3、推薦配置
switchType設置為1,表示自動切換主從。
heartbeat語句為 select user()。
balance一般設置為1即可。
一主兩從配置示例:
雙主雙從配置示例:
完整配置信息(雙主雙從)
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--只做讀寫分離,不做分庫分表,Mycat只是幫我們轉發一下請求,讀轉發到從庫,寫轉發到主庫,則schema標簽里面不用配置table-->
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
<!--配置真實存在的物理數據庫-->
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataHost name="localhost1"
maxCon="1000"
minCon="10"
balance="1"
writeType="0"
dbType="mysql"
dbDriver="native"
switchType="1"
slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM3307" url="localhost:3307" user="root" password="123456">
<readHost host="hostS3308" url="localhost:3308" user="root" password="123456" />
<readHost host="hostS3309" url="localhost:3309" user="root" password="123456" />
</writeHost>
<writeHost host="hostM3308" url="localhost:3308" user="root" password="123456">
<readHost host="hostS3307" url="localhost:3307" user="root" password="123456" />
<readHost host="hostS3310" url="localhost:3310" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>