MyCat-09之centos7上使用mycat部署水平分表---按日期分片

接上一篇帖子《MyCat-07之centos7上使用mycat部署水平分表---分片枚舉

一、目標

使用mycat部署按日期水平分片分表。
什麼叫按日期分片呢?

按照日期輪詢隔幾天存放到一個節點服務器,到了天數後再放到另外一臺節點服務器,然後一直循環下去,最終實現分片分表。

二、實施mycat按日期分片分表

以下配置均在mycat服務器mycat31上執行

1.修改vim /usr/local/mycat/conf/schema.xml
添加一行內容<table name="login_log" dataNode="dn1,dn2" rule="sharding_by_time"></table>,意爲本次試驗的按日期分片的表名叫login_log,該表被水平分片到了dn1和dn2兩臺服務器上,使用的規則叫sharding_by_time。完整的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" dataNode="dn1">
           <table name="teacher" dataNode="dn2"></table>
           <table name="student" dataNode="dn1,dn2" rule="mod_rule">
               <childTable name="student_record" primaryKey="xid" joinKey="student_id" parentKey="xid" />
           </table>
           <table name="xuser" dataNode="dn1,dn2" type="global"></table>
           <table name="salary" dataNode="dn1,dn2" rule="auto_sharding_long"></table>
           <table name="login_log" dataNode="dn1,dn2" rule="sharding_by_time"></table>
        </schema>
        <dataNode name="dn1" dataHost="host1" database="xkahn" />
        <dataNode name="dn2" dataHost="host2" database="xkahn" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="10.100.100.31:3306" user="root"
                                   password="123123">
                </writeHost>
        </dataHost>
        <dataHost name="host2" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="10.100.100.32:3306" user="root"
                                   password="123123">
                </writeHost>
        </dataHost>
</mycat:schema>

2.修改/usr/local/mycat/conf/rule.xml

2-1.添加規則

        <tableRule name="sharding_by_time">
                <rule>
                        <columns>logintime</columns>
                        <algorithm>partitionByTime</algorithm>
                </rule>
        </tableRule>

註釋:算法規則名叫sharding_by_time(與schema.xml中的保持對應),分片抓取數據的列是logintime(表名在schema.xml中有定義),算法使用的是partitionByTime(下面會自定義添加,算法名字要保持一致)

2-2.添加算法

        <function name="partitionByTime"
                          class="io.mycat.route.function.PartitionByDate">
                <property name="dateFormat">yyyy-MM-dd</property>
                <property name="sBeginDate">2014-01-01</property>
                <property name="sEndDate">2014-01-04</property>
                <property name="sPartionDay">2</property>
        </function>

註釋:
yyyy-MM-dd  ---->日期格式年月日
sBeginDate ---->第一條數據如2014-01-01
sPartionDay ---->每隔兩天分片一次
sEndDate ---->第二輪循環結束的天是2014-01-04
大概意思是,假定輸入是2014-01-01開始,那麼1號2號放到第一個節點服務器,3號和4號就放到第二個節點服務器上,這樣一輪就結束了,partionDay就是間接的告訴規則,一共兩臺服務器,走了一輪4條數據了,假定還有5號和6號就輪詢的放到第一個節點服務器上,然後就依次類推下去。

3.再打開個mycat31的終端用以啓動mycat程序

cd /usr/local/mycat/bin
./mycat console

4-1.再打開個mycat31的終端用以啓動mycat數據管理平臺

mysql -umycat -p123456 -h 10.100.100.31 -P 8066
use TESTDB;

4-2.在mycat中創建用於本次試驗的表login_log

create table login_log(xid int(10) not null unique primary key,name varchar(20) not null,logintime datetime,issuccess varchar(100),note varchar(500));

4-3.在mycat中插入用於本次的測試數據

insert into login_log(xid,name,logintime,issuccess,note) values (1,"kahn","2014-01-01","success","2014-01-01登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (2,"kahn2","2014-01-02","success","2014-01-02登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (3,"kahn3","2014-01-03","success","2014-01-03登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (4,"kahn4","2014-01-04","success","2014-01-04登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (5,"kahn5","2014-01-05","success","2014-01-05登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (6,"kahn6","2014-01-06","success","2014-01-06登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (7,"kahn7","2020-03-27","success","2020-03-27登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (8,"kahn8","2020-03-28","success","2020-03-28登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (9,"kahn9","2020-03-29","success","2020-03-29登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (10,"kahn10","2020-03-30","success","2020-03-30登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (11,"kahn11","2020-03-31","success","2020-03-31登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (12,"kahn12","2020-04-01","success","2020-04-01登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (13,"kahn13","2014-01-07","success","2014-01-07登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (14,"kahn14","2014-01-08","success","2014-01-08登錄成功了");
insert into login_log(xid,name,logintime,issuccess,note) values (15,"kahn15","2014-01-09","success","2014-01-09登錄成功了");

三、測試效果

1.分別用mycat數據管理平臺去select * from login_log;看數據

2.分別再去兩臺物理mysql服務器上觀察數據是怎麼分佈的select * from login_log;

我是分成功了,不知道你怎麼樣。照例送你一碗雞湯。

---------------------END---------------2020年3月26日23:06:37---------------------------

---------------------雞湯:比你優秀的人都比你努力,你有什麼資格懶散?---------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章