企业实战_14_MyCat跨分片查询_全局表

接上一篇:企业实战_13_MyCat清除冗余数据
https://gblfy.blog.csdn.net/article/details/100057317

文章目录

          • 一、跨分片查询验证
            • 1. 登录mycat
            • 2. 使用逻辑数据库
            • 1.3. 执行跨分片查询
            • 1.4. 异常信息,问题定位
            • 1.5. 表分布
            • 1.6. 跨分片查询的解决方式
            • 1.7. 场景分析
          • 二、企业实战跨分片查询
            • 2.1. 基础操作(熟悉即可)
            • 2.2. node2节点导出表数据
            • 2.3. node3节点导入表数据
            • 2.4. node4节点导入表数据
            • 2.5. MyCat节点
            • 2.6. 重启MyCat使配置生效
            • 2.7. 再次跨分页查询验证
          • 三、全局表验证
            • 3.1. 修改全局表数据
            • 3.2. node2节点数据验证
            • 3.3. node3节点数据验证
            • 3.4. node4节点数据验证

一、跨分片查询验证
1. 登录mycat

在任意节点(node4)上登录mycat

 mysql  -uapp_imooc -p123456 -h192.168.92.101 -P8066 
2. 使用逻辑数据库
 use imooc_db;
1.3. 执行跨分片查询
SELECTsupplier_name,b.region_name AS '省',c.region_name AS '市',d.region_name AS '区' 
FROMproduct_supplier_info aJOIN region_info b ON b.region_id = a.provinceJOIN region_info c ON c.region_id = a.cityJOIN region_info d ON d.region_id = a.district;
1.4. 异常信息,问题定位
ERROR 1064 (HY000): invalid route in sql, multi tables found but datanode has no intersection  sql

在这里插入图片描述

1.5. 表分布
节点
region_infonode1
product_supplier_infonode2
针对这种情况应该如何处理呢?
1.6. 跨分片查询的解决方式
序号方案说明
api方式通过前端程序,去订单模块中分别获取省市区的信息,之后拼接在一起
数据冗余的方式把这些省市区的信息冗余到商品模块的供应商表中
全局表字典表跨分片操作
1.7. 场景分析
  • 字典类的表:

如果通过api方式,查询的频率比较高,api调取的次数也会很高,而且通过前台程序,api调用再去拼接,比较耗时。

如果通过数据冗余方式,这个数据的冗余度比较大,字段不多还好说,针对字段比较多的字典表的话,一旦修改的话,我们就要修改和字段表相关的表,因此,字典类型的不适用api和数据冗余的方式进行处理。

MyCat提供的全局表的功能,在每个分片上都会有这个全局表,也就是说,我们会把region_info这个表以相同的数据,存储到这3个数据节点中,然后再schema.xml中声明全局表。

二、企业实战跨分片查询
2.1. 基础操作(熟悉即可)
步骤命令说明
mysqldump -uroot -p order_db region_info > region_info导出备份region_info表
mysql -uroot -p product_db < region_info将region_info 数据导入到product_db数据库中
scp region_info root@192.168.43.172:/root将region_info 表以root用户同步到ip为192.x服务器的root目录下面
2.2. node2节点导出表数据
 # 在node2节点上导出备份region_info表mysqldump -uroot -p order_db region_info > region_info# 复制到node3上scp region_info root@192.168.92.103:/root# 复制到node4上scp region_info root@192.168.92.104:/root
2.3. node3节点导入表数据
# 将region_info  数据导入到product_db数据库中
mysql -uroot -p product_db < region_info# 登录mysql
mysql -uroot -p
Enter password: 123456# 使用product_db数据库
use product_db;# 查询region_info是否导入成功
show tables;执行日志:
mysql> show tables;
+-----------------------+
| Tables_in_product_db  |
+-----------------------+
| product_brand_info    |
| product_category      |
| product_comment       |
| product_info          |
| product_pic_info      |
| product_supplier_info |
| region_info           |
+-----------------------+
7 rows in set (0.00 sec)mysql>
2.4. node4节点导入表数据
# 将region_info  数据导入到customer_db数据库中
mysql -uroot -p customer_db< region_info# 登录mysql
mysql -uroot -p
Enter password: 123456# 使用customer_db数据库
use customer_db;# 查询region_info是否导入成功
show tables;执行日志:
mysql> show tables;
+-----------------------+
| Tables_in_customer_db |
+-----------------------+
| customer_balance_log  |
| customer_inf          |
| customer_level_inf    |
| customer_login        |
| customer_login_log    |
| customer_point_log    |
| region_info           |
+-----------------------+
7 rows in set (0.00 sec)mysql>
2.5. MyCat节点
 # 进入mycat的conf目录下面cd /app/mycat/conf/# 编辑schema.xml文件vim schema.xml# 将region_info逻辑表,定义为全局表
<table name="region_info"           primaryKey="region_id"         dataNode="ordb" />
调整为<table name="region_info"           primaryKey="region_id"         dataNode="ordb,prodb,custdb" type="global"/>

在这里插入图片描述

2.6. 重启MyCat使配置生效
# 停止mycat
mycat stop# 启动mycat
mycat start# 查看启动日志
[root@node1 conf]# tail -f /app/mycat/logs/wrapper.log 
http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
INFO   | jvm 1    | 2021/07/11 17:27:51 | MyCAT Server startup successfully. see logs in logs/mycat.log
2.7. 再次跨分页查询验证
# 使用mysql客户端连接mycat
mysql  -uapp_imooc -p123456 -h192.168.92.101 -P8066# 验证跨分片查询
# 执行跨分片查询
SELECTsupplier_name,b.region_name AS '省',c.region_name AS '市',d.region_name AS '区' 
FROMproduct_supplier_info aJOIN region_info b ON b.region_id = a.provinceJOIN region_info c ON c.region_id = a.cityJOIN region_info d ON d.region_id = a.district;

在这里插入图片描述

三、全局表验证

登录mycat修改全局表数据,验证是否同步3个物理节点的物理库的全局表

3.1. 修改全局表数据

登录MyCat修改全局表数据,验证是否可以同步到其他3个数据节点中

#使用mysql客户端连接mycat
mysql  -uapp_imooc -p123456 -h192.168.92.101 -P8066# 使用逻辑库
use imooc_db;# 查看全局表数据
select * from region_info;
mysql> select * from region_info;
+-----------+-----------+---------------+--------------+
| region_id | parent_id | region_name   | region_level |
+-----------+-----------+---------------+--------------+
|         1 |         0 | 中国(china)   |            0 |
+-----------+-----------+---------------+--------------+
1 row in set (0.29 sec)mysql>

更新全局表数据

-------------------------------------------------# 更新全局表数据
update region_info set region_name='中国2022' where region_id=1;# 更新后,再次查看全局表数据
select * from region_info limit 10;
Database changed
mysql> select * from region_info;
+-----------+-----------+---------------+--------------+
| region_id | parent_id | region_name   | region_level |
+-----------+-----------+---------------+--------------+
|         1 |         0 | 中国(china)   |            0 |
+-----------+-----------+---------------+--------------+
1 row in set (0.29 sec)mysql> update region_info set region_name='中国2022' where region_id=1;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from region_info;
+-----------+-----------+-------------+--------------+
| region_id | parent_id | region_name | region_level |
+-----------+-----------+-------------+--------------+
|         1 |         0 | 中国2022    |            0 |
+-----------+-----------+-------------+--------------+
1 row in set (0.00 sec)mysql> 

注:mysql更新数据库失败 --read-only 请进入传送门:
https://blog.csdn.net/weixin_40816738/article/details/100059688

3.2. node2节点数据验证

登录node2节点

  • 在登录mycat节点修改全局表数据后,查看node2节点的数据是否被更新
# 登录数据库mysql -uroot -p # 使用指定数据use order_db;# 更新后,再次查看全局表数据
select * from region_info;发现通过登录mycat节点修改全局表数据,node2节点的数据已经更新Database changed
mysql> select * from region_info;
+-----------+-----------+-------------+--------------+
| region_id | parent_id | region_name | region_level |
+-----------+-----------+-------------+--------------+
|         1 |         0 | 中国2022    |            0 |
+-----------+-----------+-------------+--------------+
1 row in set (0.00 sec)mysql> 

在这里插入图片描述

3.3. node3节点数据验证

登录node3节点

  • 查看在登录mycat节点修改全局表数据,node3节点的数据是否被更新
# 登录数据库mysql -uroot -p # 使用指定数据use product_db;# 更新后,再次查看全局表数据
select * from region_info limit 10;发现通过登录mycat节点修改全局表数据,node3节点的数据已经更新mysql> select * from region_info limit 10;
+-----------+-----------+-------------+--------------+
| region_id | parent_id | region_name | region_level |
+-----------+-----------+-------------+--------------+
|         1 |         0 | 中国2022    |            0 |
+-----------+-----------+-------------+--------------+
1 row in set (0.01 sec)mysql>
3.4. node4节点数据验证
  • 查看在登录mycat节点修改全局表数据,node3节点的数据是否被更新
# 登录数据库mysql -uroot -p # 使用指定数据use customer_db;# 更新后,再次查看全局表数据
select * from region_info limit 10;发现通过登录mycat节点修改全局表数据,node4节点的数据已经更新mysql> select * from region_info limit 10;
+-----------+-----------+-------------+--------------+
| region_id | parent_id | region_name | region_level |
+-----------+-----------+-------------+--------------+
|         1 |         0 | 中国2022    |            0 |
+-----------+-----------+-------------+--------------+
1 row in set (0.00 sec)mysql>

下一篇:企业实战_15_MySql主从复制到MyCat总结
https://gblfy.blog.csdn.net/article/details/118657995

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java创建四叉树_Java实现 LeetCode 427 建立四叉树

427. 建立四叉树我们想要使用一棵四叉树来储存一个 N x N 的布尔值网络。网络中每一格的值只会是真或假。树的根结点代表整个网络。对于每个结点, 它将被分等成四个孩子结点直到这个区域内的值都是相同的.每个结点还有另外两个布尔变量: isLeaf 和 val。isLeaf 当这个节点是一个…

漫画:什么是二分查找?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 蠢萌的小灰来源 | 程序员小灰————— 第二天 —————什么意思呢&#xff1f;我们来举两个栗子&#xff1a;给定一个有序数组 2&#xff0c;5&#xff0c;7&#xff0c;9&#xff0c;12&#xff0c;14&#xff0c;20&…

mysql和mysqldump出现command not found 问题解决

mysql和mysqldump出现command not found 问题解决 一、给mysql配置环境变量 #找到mysql安装路径 cd /app/mysql-5.7.25 #vim /etc/profile export MYSQL_HOME/app/mysql-5.7.25 :${MYSQL_HOME}/bin二、建立软连接 1、查找mysql安装路径 find / -name mysql 通常mysql安装路径…

如何给老婆解释什么是微服务?(文末有福利)

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员有了老婆之后就是累&#xff0c;上次好不容易给她解释了什么是Restful&#xff0c;这不&#xff0c;麻烦又来了…一个周日的清晨&#xff0c;阳光洒在我的脸上&#xff0c;慢慢把我唤醒。我翻过身&#xff0c;感觉好像少了些什…

oracle19c连接MySQL_oracle19c的安装和使用navicat连接oracle数据库

一&#xff0c;数据的安装Oracle官方下载链接&#xff1a;https://www.oracle.com/downloads/#category-database首先去oracle官网下载&#xff0c;数据库里面包含了客户端&#xff0c;所以不需要再下载客户端了注意&#xff1a;有的人不下载数据库&#xff0c;只下载客户端为了…

Mycat_MySql更新数据库失败 --read-only

接上一篇&#xff1a;企业实战_20_Mycat-Web之UI监控 https://blog.csdn.net/weixin_40816738/article/details/100100053 #登录数据库 mysql -uroot -p #使用指定数据库 use 数据库名 #查看数据库处于什么状态下 show variables like read-only; #关闭read-only属性状态 set g…

Linux 运维必备的 13 款实用工具,拿好了

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源 | 高效运维本文介绍几款 Linux 运维比较实用的工具&#xff0c;希望对 Linux 运维人员有所帮助。1. 查看进程占用带宽情况 - NethogsNethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。下载&#xff1…

企业实战_12_MyCat水平扩展_分库分表

接上一篇&#xff1a;企业实战_11_MyCat垂直拆分相关配置 https://gblfy.blog.csdn.net/article/details/100055838 文章目录一、概念理论理解1. 垂直拆分理解2. 水平扩展理解3. 水平扩展案例4. 水平扩展场景5. 水平拆分原则6. 水平扩展架构图二、关键问题解决方案2.1. 分片后如…

面试阿里,我还是挂在了第四轮……

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 倪升武责编 | 郭 芮可能每个技术人都有个阿里梦&#xff0c;我也不例外。最近准备跳槽&#xff0c;前一阵子在准备各种面试&#xff0c;也面了几个大厂&#xff0c;包括阿里。是的&#xff0c;最后我挂在了第四轮。这篇文章…

Mycat+Mysql 插入数据报错 i[Err] 1064 - partition table, insert must provide ColumnList

逻辑库结构和物理库表结构如下(逻辑库结构物理库表结构)&#xff1a; CREATE TABLE order_key (id int(11) NOT NULL AUTO_INCREMENT COMMENT 主键,goods_name varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 商品名称,place varchar(2…

微服务精华问答 | 如何理解中台战略和微服务

戳蓝字“CSDN云计算”关注我们哦&#xff01;微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。今天&#xff0c;就让我们来看看关于微服务更加有深度的问题吧。1Q&#xff1a;什么是微服务A&#xff1a;1&#xff09;一组小的服务&a…

php 对象转换成数组,PHP把对象转换为数组的问题

原始对象object(Qiniu\Http\Error)#24 (2) {["url":"Qiniu\Http\Error":private]>string(25) "http://rs.qbox.me/buckets"["response":"Qiniu\Http\Error":private]>object(Qiniu\Http\Response)#25 (6) {["sta…

华为内测基于Android 10.0的EMUI 10系统;2019年Q1真无线耳机市场份额,苹果占半壁江山……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 苹果获得悬停手势专利 可隔空…

企业实战_17_MyCat水平扩展_跨分片查询_ER分片

接上一篇&#xff1a;企业实战_16_MyCat全局自增ID https://blog.csdn.net/weixin_40816738/article/details/100064315 案例比较&#xff1a; 在垂直拆分场景中&#xff0c;针对字段个数少的类型为字典类型的表&#xff0c;我们可以使用全局表的方式解决。 在水平扩展场景中&a…

bmob php支付,支付服务 - 支付服务RESTful 开发文档 - 《Bmob 文档中心》 - 书栈网 · BookStack...

注意&#xff1a;目前支付宝无法使用&#xff0c;请用户暂时不要接入&#xff0c;等待官方的恢复公告&#xff01;打款需知1.打款前请先在控制台填写以下信息2.每月的1、2、16、17号为申请打款时间&#xff0c;15号、月尾日为打款时间&#xff0c;确保用户有半个月的追诉期。Bm…

企业实战_22_MyCatSQL拦截

接上一篇&#xff1a;企业实战_21_MyCat_keepalived 安装配置验证 https://gblfy.blog.csdn.net/article/details/100073474 Mycat SQL拦截应用场景&#xff0c;可以指定监控的sql类型 文章目录1. 在server.xml文件中添加sql拦截属性标签2. 测试验证3. 查看sql拦截监控日志1. 在…

MongoDB凭什么跻身数据库排行前五?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 孙浩峰DB-Engines 数据库流行度排行榜发布了5 月份的数据&#xff0c;前六名的排名“千年不变”&#xff0c;分别是&#xff1a;Oracle、MySQL、Microsoft SQL Server、PostgreSQL、MongoDB 和IBM Db2。而其中&#xff0c;Mo…

企业实战_23_MyCat SQL防火墙

接上一篇&#xff1a;企业实战_22_MyCatSQL拦截 https://blog.csdn.net/weixin_40816738/article/details/100073474 文章目录1. SQL防火墙_白名单配置2. 白名单测试3. SQL防火墙_黑名单配置4. SQL防火墙_黑名单测试SQL防火墙&#xff1a;包括2个标签<whitehost></whi…

同样是消息队列,Kafka凭什么速度那么快?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 邴越来源 | 技术琐话Kafka的消息是保存或缓存在磁盘上的&#xff0c;一般认为在磁盘上读写数据是会降低性能的&#xff0c;因为寻址会比较消耗时间&#xff0c;但是实际上&#xff0c;Kafka的特性之一就是高吞吐率。即使是普…

企业实战_10_Mycat集成ZK实现配置同步

主机名IP地址角色数据库mycat192.168.43.32MYCAT ,MYSQL,ZKmycat&#xff08;全局自增id&#xff09;node1192.168.43.104ZKMYSQLorder_db01和order_db01node2192.168.43.217ZK,MYSQLorder_db03和order_db04node3192.168.43.172MYCAT ,MYSQLmycat&#xff08;全局自增id&#x…