MySQL分库分表学习手记三(垂直分库练习)

场景需求:

在业务系统中, 涉及以下表结构 ,由于用户与订单每天都会产生大量的数据, 单台服务器的数据存储及处理能力是有限的, 可以对数据库表进行拆分, 原有的数据库表如下。

 现考虑将其进行垂直分库操作,将商品相关的表拆分到一个数据库服务器,订单表拆分到一个数据库服务器,用户及省市区表拆分到一个服务器。最终结构如下:

 

准备工作:

1.10.168.5.183,安装mycat、mysql

2.10.168.5.193,安装mysql

3.10.168.5.194,安装mysql

4.在三台mysql机器上建立一个shopping数据库,然后退出mysql,不要进行其它任何增删改的操作。

配置schema.xml文件:

 配置server.xml:

 

分库验证测试:

启动mycat后,查看每一台mysql节点主机的情况

如下所示,已经将不同的表成功分配到各自的节点上

Mycat上看到的库和表,如下:

 

 分库查询测试:

一:如下所示,在mycat上查询用户的收件人及收件人地址信息(包含省、市、区),可以看到能过成功查询到相关的数据信息。

二:如下所示,当我们现在尝试查询每一笔订单及订单的收件地址信息(包含省、市、区)。 出现路由错误信息,无法进行查询 

invalid route in sql, multi tables found but datanode has no intersection

造成改问题的原因如下:

MyCat在执行该SQL语句时,需要往具体的数据库服务器中路由,而当前没有一个数据库服务器完全包含了订单以及省市区的表结构,所以造成SQL语句失败,报错。

解决方式:

对于省、市、区/县表tb_areas_provinces , tb_areas_city , tb_areas_region,是属于数据字典表,在多个业务模块中都可能会遇到,可以将其设置为全局表,利于业务操作。修改schema.xml中的逻辑表的配置,修改 tb_areas_provincestb_areas_city

tb_areas_region 三个逻辑表,增加 type 属性,配置为global,就代表该表是全局表,就会在所涉及到的dataNode中创建给表。对于当前配置来说,也就意味着所有的节点中都有该表了。

如下所示,我们修改schema.xml文件后,并重新连接mycat以后,查看每一台mysql节点,每一个实体mysql上都已经有了tb_areas_provinces , tb_areas_city , tb_areas_region三张表

 如下所示,我们再次测试查询每一笔订单及订单的收件地址信息(包含省、市、区)。已经能够正常查询出结果,没有出现任何错误提示

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MuYiZi2018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值