title: Mycat系列四 垂直拆分——分库date: 2021-03-31 22:21:38.119
updated: 2021-04-24 00:33:07.454
url: /?p=44
categories: 中间件 | 数据库
tags: Mycat
https://developer.aliyun.com/ask/127790?spm=a2c6h.13159736
https://blog.csdn.net/kris1025/article/details/80181641
https://zhuanlan.zhihu.com/p/45046787
Q:垂直拆分是什么?
Q:为什么叫分库?
A:这里说的分库,指的是拆分数据库,不是拆数据库表。
一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同 的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图:
系统被切分成了,用户,订单交易,支付几个模块。
1. 如何划分表
分库的原则:有紧密关联关系的表应该在一个库里,相互没有关联关系的表可以分到不同的库里。
Q:两个数据库在同一个主机上能否做关联查询?
A:可以。
Q:两个数据库不在一个主机上能否做关联查询?
A:不可以
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #客户表 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) );
|
以上四个表如何分库?客户表分在一个数据库,另外三张都需要关联查询,分在另外一个数据库。
2. 配置分库
2.1 修改 schema 配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| … <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="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.140.128: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="hostM2" url="192.168.140.127:3306" user="root" password="123123"> </writeHost> </dataHost> …
|
#如下图
2.2 新增两个空白库
分库操作不是在原来的老数据库上进行操作,需要准备两台机器分别安装新的数据库
1 2 3 4 5
| #在数据节点 dn1、dn2 上分别创建数据库 orders CREATE DATABASE orders; ···
## 4.3 启动 Mycat
|
./mycat console
1 2 3
| ![image.png](http://8.136.152.109:8090/upload/2021/03/image-b1f72ac3df2f489e97bac0216a64947d.png)
## 4.4 访问 Mycat 进行分库
|
#访问 Mycat
mysql -umycat -p123456 -h 192.168.140.128 -P 8066
#切换到 TESTDB
#创建 4 张表
#查看表信息,可以看到成功分库