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......