本文我們來介紹下MyCat的分庫分表操作
分庫分表
一、分片規則介紹
在rule.xml
中定義了各種myCat支持的分片規則。
- 取模mod-long
- 自然月分片 sharding-by-month
- 按日期(天)分片sharding-by-date
- 按單月小時拆分sharding-by-hour
- 范圍約定,提前規划好分片字段某個范圍屬於哪個分片,auto-sharding-long
- 范圍求模分片
- 取模范圍約束sharding-by-pattern
- 分片枚舉sharding-by-intfile
- 固定分片hash算法
- 截取數字hash解析sharding-by-stringhash
- 一致性hash
- 日期范圍hash分片rangeDateHash
- 截取數字做hash求模范圍約束sharding-by-prefixpattern
- 應用指定,在運行階段有應用自主決定路由到那個分片。sharding-by-substring
- 冷熱數據分片 sharding-by-date
- 有狀態分片算法
- crc32slot分片算法
注意
:
- id中推薦配置主鍵列
- 所有的 tableRule 只能使用一次。如果需要為多個表配置相同的分片規則,那么需要在此重新定義該規則。
- 在 crc32Slot 算法中的分片數量一旦給定,MyCat 會將該分片數量和 slor 的取值范圍保存到文件中。在次修改分片數量時是不會生效的,需要將該文件刪除。文件位置位於 conf目錄中的 ruledata 目錄中。
二、分庫配置
2.1 創建3個數據庫
在master
中分別創建3個數據庫demo1
,demo2
,demo3
,因為主從的關系會同步到從庫中。
create database demo1 default character set utf8;
create database demo2 default character set utf8;
create database demo3 default character set utf8;
2.2 schema.xml配置
修改schema.xml文件中的信息,如下:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="t_user" dataNode="dn1,dn2,dn3" rule="crc32slot" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="demo1" />
<dataNode name="dn2" dataHost="localhost1" database="demo2" />
<dataNode name="dn3" dataHost="localhost1" database="demo3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" 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.88.180:3306" user="root" password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.88.181:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
注意
:
- 因為有三個庫,所以添加了三個
dataNode
- 使用的分配規則是
crc32slot
- 主從和讀寫分離設置沒有動,所以
writeHost
和readHost
的配置沒變
2.3 修改rule.xml文件
因為使用的是crc32slot
算法,且有3個數據庫,所以需要修改rule.xml中的配置
同時我們需要刪除掉ruledata
目錄中的規則文件,不然修改的3
不會起作用
重啟mycat服務
查看分配規則
2.3 在mycat中創建t_user表
先刪除原來創建的t_user
表,然后通過mycat創建t_user
表示,通過mycat創建會多出來一個_slot
字段。
CREATE TABLE t_user (
`id` INT,
`name` VARCHAR (30),
`age` INT,PRIMARY KEY (
`id
`
)
)
ENGINE
=
INNODB
DEFAULT
CHARSET
= utf8
;
三、分庫測試
在mycat客戶端插入數據,然后去對應的物理庫中查詢具體的情況
insert into t_user(id,name,age)values(1,'HG-93',14)
注意
:插入語句的語法要完整,不要偷懶省略字段,尤其是id
自增長!!!
數據按照我們設置的規則分別存儲到了各自數據的表結構中了。
然后我們來看下查詢操作,通過mycat看能否將所有的數據都查詢出來,