mycat 單庫分表實踐


參考

https://blog.csdn.net/sq2006hjp/article/details/78732227

Mycat采用的水平拆分,不管是分庫還是分表,都是水平拆分的。分庫是指,把一個大表的數據,分為多個同名的表,分別存到不同的數據庫;分表是指,把一個大表,拆成多個不同名的表,放在一個數據庫里。這里不論是分庫還是分表,分拆出來的表字段都是跟原表一模一樣的。

Mycat提供的分片方案有很多,這里選用按月分片這個方案來分片,也就是說每個自然月的數據,會分到相應的表里面。

而這些表,都在咱們配置的db4這個庫里面。

第一步:配置schema.xml

在schema 里設置測試表sqtestmonth,

定義分表的表明規則:subTables="sqtestmonth2017$1-12"

指定dataNode:dataNode="dn4"

設定分片規則:rule="sharding-by-month"

 

<table name="sqtestmonth" primaryKey="ID" subTables="sqtestmonth2017$1-12" dataNode="dn4" rule="sharding-by-month" />

 

 

<dataNode name="dn4" dataHost="localhost1" database="db4" />

<writeHost host="hostM1" url="localhost:3307" user="root"

   password="123456">

第二步,配置rule.xml

設置日期格式和開始日期

<function name="partbymonth"

class="io.mycat.route.function.PartitionByMonth">

<property name="dateFormat">yyyy-MM-dd</property>

<property name="sBeginDate">2017-01-01</property>

</function>

<tableRule name="sharding-by-month">

<rule>

<columns>create_time</columns>

<algorithm>partbymonth</algorithm>

</rule>

</tableRule>

 

 

第三步,9066 load config,無需重啟Mycat

mysql -uroot -proot -P9066 -h127.0.0.1

mysql> reload @@config;

Query OK, 1 row affected (0.12 sec)

Reload config success

 

 

第四步,mysql db4 建表

CREATE TABLE `sqtestmonth20171` (`id` int not null,`name` varchar(60) NULL, create_time DATE ,PRIMARY KEY (`id`));

CREATE TABLE `sqtestmonth20172` (`id` int not null,`name` varchar(60) NULL, create_time DATE ,PRIMARY KEY (`id`));

CREATE TABLE `sqtestmonth20173` (`id` int not null,`name` varchar(60) NULL, create_time DATE ,PRIMARY KEY (`id`));

CREATE TABLE `sqtestmonth20174` (`id` int not null,`name` varchar(60) NULL, create_time DATE ,PRIMARY KEY (`id`));

 

第五步,MYCAT 8066 插入數據

insert into sqtestmonth (id,name,create_time) values(1,'sq1', '2017-1-12');

insert into sqtestmonth (id,name,create_time) values(2,'sq2', '2017-1-22');

insert into sqtestmonth (id,name,create_time) values(3,'sq3', '2017-2-5');

insert into sqtestmonth (id,name,create_time) values(4,'sq4', '2017-2-12');

insert into sqtestmonth (id,name,create_time) values(5,'sq5', '2017-3-12');

 

 

結果:

1月的數據,都插入到了sqtestmonth20171這個表里面

 

2月的數據,都插入到了sqtestmonth20172這個表里面

3月的數據,都插入到了sqtestmonth20173這個表里面

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM