mycat實現MySQL數據庫分表

Mycat的安裝其實只要解壓下載的目錄就可以了,非常簡單。
安裝完成後,目錄如下:

目錄說明
binmycat命令,啓動、重啓、停止等
catletcatlet爲Mycat的一個擴展功能
confMycat 配置信息,重點關注
libMycat引用的jar包,Mycat是java開發的
logs日誌文件,包括Mycat啓動的日誌和運行的日誌。

配置

Mycat的配置文件都在conf目錄裏面,這裏介紹幾個常用的文件:

文件說明
server.xmlMycat的配置文件,設置賬號、參數等
schema.xmlMycat對應的物理數據庫和數據庫表的配置
rule.xmlMycat分片(分庫分表)規則
拓撲圖

894662-20180504111737896-664675323.png

環境準備工作

項目

Mycat

MySQL1

MySQL2

IP

11.112.0.123

11.112.0.10

11.112.0.51

Port

8066/9066

3066

3066

兩套MySQL數據庫爲相互獨立的。

兩套MySQL數據庫創建例表如下:

create database lunch;
CREATE TABLE item (
    id INT NOT NULL AUTO_INCREMENT,
    value INT NOT NULL default 0,
    indate DATETIME NOT NULL default '1990-01-01 00:00:00',
    PRIMARY KEY (id)
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;

修改相關配置文件:

schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="lunch" checkSQLschema="false" sqlMaxLimit="100">
        <table name="item" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2"  rule="mod-long" />   
    </schema>
 
<!-- 分片配置 -->
    <dataNode name="dn1" dataHost="mysql1" database="lunch" />
    <dataNode name="dn2" dataHost="mysql2" database="lunch" />
 
<!-- 物理數據庫配置 -->
    <dataHost name="mysql1" maxCon="1000" minCon="10" balance="0"  writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="mysql1" url="11.112.0.10:3306" user="root" password="root"> 
        </writeHost>
    </dataHost>
 
    <dataHost name="mysql2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="mysql2" url="11.112.0.51:3306" user="root" password="root"> 
        </writeHost>
    </dataHost>
</mycat:schema>

配置文件中使用mod-long方式進行分表,規則文件爲rule.xml。本例中使用兩套MySQL做分庫,需要把rule.xml中mod-long配置進行修改,<property name="count">2</property>

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
                <!-- how many data nodes -->
                <property name="count">2</property>
        </function>

修改server.xml,schemas中配置的與schema.xml中配置的一樣

<user name="root" defaultAccount="true">
              <property name="password">123456</property>
              <property name="schemas">lunch</property>
       </user>

啓動mycat

mycat start

登錄mycat

mysql -uroot -p123456 -h mycat1 -P 8066

use lunch;

執行插入數據操作

insert into item(id,value,indate) values(1,100,now());
insert into item(id,value,indate) values(2,100,now());
insert into item(id,value,indate) values(3,100,now());
insert into item(id,value,indate) values(4,100,now());
insert into item(id,value,indate) values(5,100,now());
insert into item(id,value,indate) values(6,100,now());
insert into item(id,value,indate) values(7,100,now());

查看數據

1.png

從上圖可知數據已插入庫中。

分別登錄MySQL1和MySQL2查看數據情況

MySQL1

2.png

MySQL2

3.png

可以看到數據分別插入到不同的庫中

參考:https://www.jianshu.com/p/2d1a81b2dafc

https://www.cnblogs.com/mracale/p/8989248.html


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