天天看点

Mycat 之 垂直拆分(分库)

分库原则:有关联关系的表放在一个库里,相互没有关联关系的表可以分到不同的库里。原理图如下:

Mycat 之 垂直拆分(分库)

一、配置文件

vim /usr/local/mycal/conf/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="customer" dataNode="dn2"></table>
        </schema>
        <dataNode name="dn1" dataHost="host1" database="orders" />
        <dataNode name="dn2" dataHost="host2" database="orders" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.157.133:3306" user="root"
                                   password="root">
                </writeHost>
        </dataHost>
        <dataHost name="host2" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.157.139:3306" user="root"
                                   password="root">
                </writeHost>
        </dataHost>
</mycat:schema>
           
Mycat 之 垂直拆分(分库)

二、在2个机器上分别创建orders库

create database orders;

三、启动mycat

mycat console

Mycat 之 垂直拆分(分库)

四、在mycat上进行分库

#访问mycat
mysql -umycat -p123456 -h 192.168.157.133 -P 8066

#切换到TESTDB
ues TESTDB;

#创建表
#客户表 rows:20万
CREATE TABLE customer(
 id INT AUTO_INCREMENT,
 NAME VARCHAR(200),
 PRIMARY KEY(id)
);
#订单表 rows:600万
CREATE TABLE orders(
 id INT AUTO_INCREMENT,
 order_type INT,
 customer_id INT,
 amount DECIMAL(10,2),
 PRIMARY KEY(id) 
);
#订单详细表 rows:600万
CREATE TABLE orders_detail(
 id INT AUTO_INCREMENT,
 detail VARCHAR(2000),
 order_id INT,
 PRIMARY KEY(id)
);
#订单状态字典表 rows:20
CREATE TABLE dict_order_type(
 id INT AUTO_INCREMENT,
 order_type VARCHAR(200),
 PRIMARY KEY(id)
);
           

查看表信息,我们看到已经成功分库了

Mycat 之 垂直拆分(分库)