Mycat 的分片(水平分片)例項
要求:
把一個表分片儲存到三個資料節點上。
節點環境:
mysql節點1環境
作業系統版本 : centos6.4
資料庫版本 : mysql-5.6
mycat版本 :1.4 release
資料庫名 : db1、db3
ip:192.168.25.134
mysql節點2環境
作業系統版本 : centos6.4
資料庫版本 : mysql-5.6
mycat版本 :1.4 release
資料庫名 : db2
ip:192.168.25.166
MyCat安裝到節點1上(需要安裝jdk)
配置schema.xml:
Schema.xml理解:
Schema.xml作為MyCat中重要的配置檔案之一,管理著MyCat的邏輯庫、表、分片規則、DataNode以及DataSource
schema 標籤用於定義MyCat例項中的邏輯庫
Table 標籤定義了MyCat中的邏輯表
dataNode 標籤定義了MyCat中的資料節點,也就是我們通常說所的資料分片。
dataHost標籤在mycat邏輯庫中也是作為最底層的標籤存在,直接定義了具體的資料庫例項、讀寫分離配置和心跳語句。
注意:
若是LINUX版本的MYSQL,則需要設定為Mysql大小寫不敏感,否則可能會發生表找不到的問題。
在MySQL的配置檔案中my.ini [mysqld] 中增加一行 lower_case_table_names = 1
Schema.xml中配置:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
<schema name="TESTDB" checkSQLschema ="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<table name="TB_ITEM" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
<table name="TB_USER" primaryKey="ID" type="global" dataNode="dn1,dn2" />
</schema>
<dataNode name="dn1" dataHost ="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost2" database="db2" />
<dataNode name="dn3" dataHost="localhost1" 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="192.168.25.134:3306" user="root"
password="root">
<!-- can have multi read hosts -->
</writeHost>
</dataHost>
<dataHost name="localhost2" 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="192.168.25.166:3306" user="root"
password="root">
<!-- can have multi read hosts -->
</writeHost>
</dataHost>
</mycat:schema>
配置server.xml:
server.xml幾乎儲存了所有mycat需要的系統配置資訊。最常用的是在此配置使用者名稱、密碼及許可權。
<user name="test">
<property name="password">test</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
配置rule.xml:
rule.xml裡面定義了我們對錶進行拆分所涉及到的規則定義。我們可以對錶使用不同的分片演算法,或者對錶使用相同的演算法,具體的引數不同。
這個檔案裡面主要有tableRule和function這兩個標籤。在具體使用過程中可以按照需求新增tableRule和function。
此配置檔案可以不用修改,使用預設即可。
分片測試:
由於配置的分片規則為“auto-sharding-long”,所以mycat會根據此規則自動分片。
每個datanode中儲存一定數量的資料。根據id進行分片
經測試id範圍為:
Datanode1:1~5000001
Datanode2:5000001~10000001
Datanodcct:10000001~15000001
當15000001以上的id插入時報錯:
[Err] 1064 - can’t find any valid datanode :TB_ITEM -> ID -> 15000002
此時需要再新增節點。
ok!!!結束!! 希望給各位猿友帶來幫助吧!!! 偷偷告訴你們!!!這是我剛寫的日記!!