前提
MyCat版本 :1.6.7.4
MySQL版本 :5.7.26
1.下載
MyCat的一些介紹,MyCat的下載地址,直接解壓縮即可,無需安裝,這裏就不在過多介紹了。
2.配置
其實簡單分片測試需要改動的地方不多,但是首次接觸的情況下,難免對很多東西不瞭解,改東西也容易改錯,多多少少會出現問題,下面我們就簡單的來看下需要我們進行改動的文件。
2.1.schema.xml
MyCat的配置文件都放在MyCat目錄下的conf文件夾下,首先我們來看下schema文件。schema文件是MyCat的重要配置文件之一,管理着邏輯庫、表、分片規則、數據節點以及數據源。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESDB" checkSQLschema="true" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
<!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
/> -->
</schema>
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/> -->
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
<dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
<dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" />
<dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" /> -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
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="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
<!--
<dataHost name="sequoiadb1" maxCon="1000" minCon="1" balance="0" dbType="sequoiadb" dbDriver="jdbc">
<heartbeat> </heartbeat>
<writeHost host="hostM1" url="sequoiadb://1426587161.dbaas.sequoialab.net:11920/SAMPLE" user="jifeng" password="jifeng"></writeHost>
</dataHost>
<dataHost name="oracle1" maxCon="1000" minCon="1" balance="0" writeType="0" dbType="oracle" dbDriver="jdbc"> <heartbeat>select 1 from dual</heartbeat>
<connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql>
<writeHost host="hostM1" url="jdbc:oracle:thin:@127.0.0.1:1521:nange" user="base" password="123456" > </writeHost> </dataHost>
<dataHost name="jdbchost" maxCon="1000" minCon="1" balance="0" writeType="0" dbType="mongodb" dbDriver="jdbc">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM" url="mongodb://192.168.0.99/test" user="admin" password="123456" ></writeHost> </dataHost>
<dataHost name="sparksql" maxCon="1000" minCon="1" balance="0" dbType="spark" dbDriver="jdbc">
<heartbeat> </heartbeat>
<writeHost host="hostM1" url="jdbc:hive2://feng01:10000" user="jifeng" password="jifeng"></writeHost> </dataHost> -->
<!-- <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="0" dbType="mysql"
dbDriver="jdbc"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1"
url="jdbc:mysql://localhost:3306" user="root" password="123456"> </writeHost>
</dataHost> -->
</mycat:schema>
schema標籤
一個schema標籤代表一個邏輯庫,每個邏輯庫都有自己的相關配置,可以根據情況定義多個邏輯庫。
name屬性用於定義邏輯庫的名稱。
checkSQLschema屬性則用於檢測SQL語句中帶了邏輯庫名稱是否去掉。
例如
select * from TESTDB.travelrecord;
如果爲true,則去掉,語句簡化爲
select * from travelrecord;
但是非邏輯庫名稱,則無效,例如
select * from db1.travelrecord;
其中db1不會被刪除。
注意:Linux 下部署安裝MySQL,默認不忽略表名大小寫,需要手動到/etc/my.cnf 下配置lower_case_table_names=1使Linux環境下MySQL忽略表名大小寫,否則使用MyCAT的時候會提示找不到表的錯誤!
sqlMaxLimit用於定義默認顯示信息的數量,例如定義爲100
select * from TESTDB.travelrecord;
實際等同於
select * from TESTDB.travelrecord limit 100;
當然,如果SQL語句中顯示指定了limit,則不受該屬性約束。
table標籤
邏輯庫中定義的邏輯表。
name用於定義邏輯表的名稱。
dataNode定義這個邏輯表所屬的dataNode,該屬性的值需要的dataNode標籤中name屬性的值相互對應。
rule指定邏輯表需要使用的規則名稱,該名稱需在rule.xml中定義,具體可參考rule.xml相關介紹。
dataNode標籤
用於定義MyCat數據節點,也就是數據分片,通俗點講一個dataNode對應一個物理數據庫。
name定義數據節點的名稱,table標籤中dataNode屬性使用。
dataHost對應dataHost標籤中的name屬性值。
database對應的具體物理數據庫。
dataHost標籤
name dataHost名稱,供dataNode的dataHost使用。
maxCon 連接池最大連接數
minCon 連接池最小連接數
dbType 數據庫類型
dbDriver 連接數據庫的Driver類型
heartbeat標籤
用於和後端數據庫進行心跳檢查的語句。
writeHost標籤
host一般writeHost我們使用*M1,readHost我們用*S1
url 物理數據庫host+端口 localhost:3306
user 物理數據庫用戶名
password 物理數據庫密碼
雖然每個屬性都有自己的意義,但是如果不做深入研究,只需要注意幾個標籤的幾個屬性即可。
schema標籤 name屬性
table標籤 name、dataNode屬性
dataNode標籤 name、datahost、database屬性
dataHost標籤 name屬性
writeHost標籤 url、user、password
當然如果僅做測試,目前只需要修改writeHost標籤的幾個屬性即可。