作用
mycat就是一個數據庫中間件,數據庫的代理,它屏蔽了物理數據庫,應用連接mycat,然后mycat再連接物理數據庫
它支持水平拆分(分庫分表,通過分庫達到分表),支持多種分片規則,比如范圍切片、自然月分片、hash取模分片等
它支持mysql、oracle、mongodb、sql server,並且支持數據庫集群。
使用網上的兩張圖片表示mycat解決的問題
沒有mycat前
有了mycat后
入門教程
去github下載,Mycat-server-x.x.x-RELEASE-xxxxxxxxxx-win.tar.gz
解壓后,修改mycat_home\conf\schema.xml中的url、user、password
修改mycat_home\conf\server.xml
進入mycat_home\bin,啟動mycat
登錄物理數據庫,創建db1、db2、db3
mysql -u[username] -p -P3306
- 1
create database db1;
create database db2;
create database db3;
- 1
- 2
- 3
- 客戶端連接mycat,注意連接的是mycat而不是物理數據庫,mycat默認端口號8066
mysql -u[username] -p -P8066
- 1
查看表,默認顯示schema.xml中配置的表,實際上此時物理數據庫沒有表,所以查詢employee會出錯
登錄物理數據庫。
mycat中,創建employee表,插入數據
create table employee (id int not null primary key,name varchar(100),sharding_id int not null);
insert into employee(id,name,sharding_id) values(1,'leader us',10000);
insert into employee(id,name,sharding_id) values(2, 'me',10010);
insert into employee(id,name,sharding_id) values(3, 'mycat',10000);
insert into employee(id,name,sharding_id) values(4, 'mydog',10010);
mycat中,執行計划顯示來自兩個數據節點,與schema.xml中配置的一致
物理數據庫中,mycat創建了employee表,查看數據,可以發現數據實現了分片
db1中的employee數據,id為1、3兩條數據
db2中的employee數據,id為2、4兩條數據
配置文件介紹
- schema.xml 配置schema、datanode、datahost
- schema就是邏輯數據庫,它包含table(邏輯表),表中有對應的datanode、分片規則
- datanode,就是邏輯數據庫,含有物理數據庫名字
- datahost,就是物理數據庫的ip地址,用戶名、密碼等
- server.xml 配置連接mycat的用戶名、密碼、數據庫名
- rule.xml 分片規則
后記
最初我是想着mycat可以實現同一個庫,某個表的切片而研究的mycat(比如db1中某個employee表,拆分為employee1-99,employee100-199,employee299-299….)。經過上述研究,發現mycat是通過分庫而達到的分表,所以是不支持我最初的需求的。