旅游示范校建设专题网站,河南省住房建设厅官方网站,2022年中国企业500强,wordpress百度显示缩略图目录
场景
配置
测试
全局表配置 续接上篇#xff1a;MySQ分库分表与MyCat安装配置-CSDN博客
续接下篇#xff1a;Mycat分片-水平拆分-CSDN博客 场景
在业务系统中, 涉及以下表结构 ,但是由于用户与订单每天都会产生大量的数据, 单台服务器的数据 存储及处理能力是有限…目录
场景
配置
测试
全局表配置 续接上篇MySQ分库分表与MyCat安装配置-CSDN博客
续接下篇Mycat分片-水平拆分-CSDN博客 场景
在业务系统中, 涉及以下表结构 ,但是由于用户与订单每天都会产生大量的数据, 单台服务器的数据 存储及处理能力是有限的, 可以对数据库表进行拆分, 原有的数据库表如下。 现在考虑将其进行垂直分库操作将商品相关的表拆分到一个数据库服务器订单表拆分的一个数据库 服务器用户及省市区表拆分到一个服务器。最终结构如下 三台服务器依旧可以使用上篇使用的三台服务器现在需要在这三台主机的mysql中创建shopping库
CREATE DATABASE shopping; 配置 schema.xml
该文件全部替换为下述配置参照自己的名字进行修改或者依照我的参数不修改进行测试。
?xml version1.0?
!DOCTYPE mycat:schema SYSTEM schema.dtd
mycat:schema xmlns:mycathttp://io.mycat/schema nameSHOPPING checkSQLschematrue sqlMaxLimit100table nametb_goods_base dataNodedn1 primaryKeyid /table nametb_goods_brand dataNodedn1 primaryKeyid /table nametb_goods_cat dataNodedn1 primaryKeyid /table nametb_goods_desc dataNodedn1 primaryKeygoods_id /table nametb_goods_item dataNodedn1 primaryKeyid /table nametb_order_item dataNodedn2 primaryKeyid /table nametb_order_master dataNodedn2 primaryKeyorder_id /table nametb_order_pay_log dataNodedn2 primaryKeyout_trade_no /table nametb_user dataNodedn3 primaryKeyid /table nametb_user_address dataNodedn3 primaryKeyid /table nametb_areas_provinces dataNodedn3 primaryKeyid/table nametb_areas_city dataNodedn3 primaryKeyid/table nametb_areas_region dataNodedn3 primaryKeyid//schemadataNode namedn1 dataHostdhost1 databaseshopping /dataNode namedn2 dataHostdhost2 databaseshopping /dataNode namedn3 dataHostdhost3 databaseshopping /dataHost namedhost1 maxCon1000 minCon10 balance0writeType0 dbTypemysql dbDriverjdbc switchType1 slaveThreshold100heartbeatselect user()/heartbeatwriteHost hostmaster urljdbc:mysql://192.168.226.100:3306?useSSLfalseamp;serverTimezoneAsia/Shanghaiamp;characterEncodingutf8 userroot passwordadmin //dataHostdataHost namedhost2 maxCon1000 minCon10 balance0writeType0 dbTypemysql dbDriverjdbc switchType1 slaveThreshold100heartbeatselect user()/heartbeatwriteHost hostmaster urljdbc:mysql://192.168.226.101:3306?useSSLfalseamp;serverTimezoneAsia/Shanghaiamp;characterEncodingutf8 userroot passwordadmin //dataHostdataHost namedhost3 maxCon1000 minCon10 balance0writeType0 dbTypemysql dbDriverjdbc switchType1 slaveThreshold100heartbeatselect user()/heartbeatwriteHost hostmaster urljdbc:mysql://192.168.226.102:3306?useSSLfalseamp;serverTimezoneAsia/Shanghaiamp;characterEncodingutf8 userroot passwordadmin //dataHost/mycat:schemaserver.xml
仅仅修改下述模块即可其他模块不同动 user nameroot defaultAccounttrueproperty namepassword123456/propertyproperty nameschemasSHOPPING/property!-- 表级 DML 权限设置 --!-- privileges checkfalseschema nameTESTDB dml0110 table nametb01 dml0000/tabletable nametb02 dml1111/table/schema/privileges --/useruser nameuserproperty namepassword123456/propertyproperty nameschemasSHOPPING/propertyproperty namereadOnlytrue/property/user
重启mycat服务
/usr/local/mycat/bin/mycat stop
/usr/local/mycat/bin/mycat start
登陆mycat查看
[rootmaster ~]# mysql -h 192.168.226.100 -P 8066 -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.29-mycat-1.6.7.3-release-20210913163959 MyCat Server (OpenCloudDB)Copyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type help; or \h for help. Type \c to clear the current input statement.mysql show databases;
----------
| DATABASE |
----------
| SHOPPING |
----------
1 row in set (0.00 sec)mysql use SHOPPING;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql show tables;
--------------------
| Tables in SHOPPING |
--------------------
| tb_areas_city |
| tb_areas_provinces |
| tb_areas_region |
| tb_goods_base |
| tb_goods_brand |
| tb_goods_cat |
| tb_goods_desc |
| tb_goods_item |
| tb_order_item |
| tb_order_master |
| tb_order_pay_log |
| tb_user |
| tb_user_address |
--------------------
13 rows in set (0.00 sec)测试 上传测试SQL脚本到服务器的/root目录
链接https://pan.baidu.com/s/1LxC9bgyoLs23f1DiD6VU4Q?pwd7ulh 提取码7ulh
[rootmaster ~]# ll-rw-r--r-- 1 root root 233274 2月 22 2022 shopping-insert.sql
-rw-r--r-- 1 root root 9194 2月 22 2022 shopping-table.sql执行指令导入测试数据
重新启动MyCat后在mycat的命令行中通过source指令导入表结构以及对应的数据查看数据 分布情况。
use SHOPPING;
source /root/shopping-table.sql
source /root/shopping-insert.sql
将表结构及对应的测试数据导入之后可以检查一下各个数据库服务器中的表结构分布情况。 检查是 否和我们准备工作中规划的服务器一致。 查询用户的收件人及收件人地址信息(包含省、市、区)。 在MyCat的命令行中当我们执行以下多表联查的SQL语句时可以正常查询出数据。
select ua.user_id, ua.contact, p.province, c.city, r.area , ua.address from
tb_user_address ua ,tb_areas_city c , tb_areas_provinces p ,tb_areas_region r
where ua.province_id p.provinceid and ua.city_id c.cityid and ua.town_id
r.areaid ; 查询每一笔订单及订单的收件地址信息(包含省、市、区)。 实现该需求对应的SQL语句如下
SELECT order_id , payment ,receiver, province , city , area FROM tb_order_master o
, tb_areas_provinces p , tb_areas_city c , tb_areas_region r WHERE
o.receiver_province p.provinceid AND o.receiver_city c.cityid AND
o.receiver_region r.areaid ;
但是现在存在一个问题订单相关的表结构是在 192.168.226.101 数据库服务器中而省市区的数 据库表是在 192.168.226.102 数据库服务器中。 经过测试我们看到SQL语句执行报错。原因就是因为MyCat在执行该SQL语句时需要往具体的数 据库服务器中路由而当前没有一个数据库服务器完全包含了订单以及省市区的表结构造成SQL语句 失败报错。
对于上述的这种现象我们如何来解决呢 下面我们介绍的全局表就可以轻松解决这个问题 全局表配置 对于省、市、区/县表tb_areas_provinces , tb_areas_city , tb_areas_region是属于 数据字典表在多个业务模块中都可能会遇到可以将其设置为全局表利于业务操作。
修改schema.xml中的逻辑表的配置修改 tb_areas_provinces、tb_areas_city、 tb_areas_region 三个逻辑表增加 type 属性配置为global就代表该表是全局表就会在 所涉及到的dataNode中创建给表。对于当前配置来说也就意味着所有的节点中都有该表了。
修改这三个字段dataNode中指定dn1dn2dn3 table nametb_areas_provinces dataNodedn1,dn2,dn3 primaryKeyid/table nametb_areas_city dataNodedn1,dn2,dn3 primaryKeyid/table nametb_areas_region dataNodedn1,dn2,dn3 primaryKeyid/ 配置完毕后重新启动MyCat。
删除原来每一个数据库服务器中的所有表结构
通过source指令重新导入表及数据
检查每一个数据库服务器中的表及数据分布看到三个节点中都有这三张全局表
然后再次执行多表联查的SQL语句 是可以正常执行成功的。
当在MyCat中更新全局表的时候我们可以看到所有分片节点中的数据都发生了变化每个节 点的全局表数据时刻保持一致。全局表会出现在每个指定的节点中。