Mycat(垂直拆分——分库)

如何划分表

问题:在两台主机上的两个数据库中的表,能否关联查询?

不可以关联查询

分库的原则:有紧密关联关系的表应该在一个库里面,相互没有关联关系的表可以分到不同的库里面

#客户表 
CREATE TABLE customer(
   id INT AUTO_INCREMENT,
   NAME VARCHAR(200),
   PRIMARY KEY(id)
);

#订单表
CREATE TABLE orders(
        id INT AUTO_INCREMENT,
        order_type INT,
        customer_id INT,
        amount DECIMAL(10,2),
        PRIMARY KEY(id)
);

#订单详情表
CREATE TABLE orders_detail(
     id INT AUTO_INCREMENT,
     detail VARCHAR(200),
     order_id INT,
     PRIMARY KEY(id)
);

#订单状态字典表
CREATE TABLE dict_order_type(
     id INT AUTO_INCREMENT,
     order_type VARCHAR(200),
     PRIMARY KEY(id)
);

已上四个表如何拆分?客户表分在一个数据库,其他三张表都需要关联查询,分在一个别的数据库。

配置分库

1.修改schena配置文件

<?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> //默认是dn1这里是将customer分到dn2上
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="orders" />
        <dataNode name="dn2" dataHost="localhost2" database="orders" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="172.17.0.2:3306" user="root" password="123">

                </writeHost>
        </dataHost>
         <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="172.17.0.3:3306" user="root" password="123">

                </writeHost>
        </dataHost>

</mycat:schema>

2.新增两个空白库

分库操作不是在原来的老数据库上进行操作,需要准备两个数据库。

#在数据节点db1,db2上都创建数据库orders
CREATE DATABASE orders;

进入mysql访问mycat(也可以通过可视化工具连接)

mysql -uroot -pdigdeep -h 容器ip -P8066

切换到TESTDB

创建四张表

查看表信息,可以看到成功分库。

mycat:

 

 dn1:

 

 dn2:

 

 

over......  

posted @ 2020-12-30 10:53  chenjiahao  阅读(309)  评论(0编辑  收藏  举报