当前位置: 首页 > article >正文

MySQL垂直分库(基于MyCat)

参考资料:

参考视频

参考博客

Mycat基本部署

视频参考资料:链接: https://pan.baidu.com/s/1xT_WokN_xlRv0h06b6F3yg 提取码: aag3 


概要:

        本文的垂直分库,全部是基于前文部署的基本架构进行的


垂直分库:

        垂直分库相对来说比较简单

  • 只需要指定指定表去到哪台服务器即可
  • 不需要分片规则

        我们将进行如下分库

1. 修改schema.xml

        利用Notepad++,将schema.xml的内容替换为如下内容,根据个人进行修改

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="SHOPPING" checkSQLschema="true" sqlMaxLimit="100"><table name="tb_goods_base" dataNode="dn1" primaryKey="id" /><table name="tb_goods_brand" dataNode="dn1" primaryKey="id" /><table name="tb_goods_cat" dataNode="dn1" primaryKey="id" /><table name="tb_goods_desc" dataNode="dn1" primaryKey="goods_id" /><table name="tb_goods_item" dataNode="dn1" primaryKey="id" /><table name="tb_order_item" dataNode="dn2" primaryKey="id" /><table name="tb_order_master" dataNode="dn2" primaryKey="order_id" /><table name="tb_order_pay_log" dataNode="dn2" primaryKey="out_trade_no" /><table name="tb_user" dataNode="dn3" primaryKey="id" /><table name="tb_user_address" dataNode="dn3" primaryKey="id" /><table name="tb_areas_provinces" dataNode="dn3" primaryKey="id"/><table name="tb_areas_city" dataNode="dn3" primaryKey="id"/><table name="tb_areas_region" dataNode="dn3" primaryKey="id"/></schema><dataNode name="dn1" dataHost="dhost1" database="shopping" /><dataNode name="dn2" dataHost="dhost2" database="shopping" /><dataNode name="dn3" dataHost="dhost3" database="shopping" /><dataHost name="dhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="master" url="jdbc:mysql://192.168.154.142:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123888" /></dataHost><dataHost name="dhost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="master" url="jdbc:mysql://192.168.154.143:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123888" /></dataHost><dataHost name="dhost3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="master" url="jdbc:mysql://192.168.154.144:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123888" /></dataHost>
</mycat:schema>

2. 创建目标数据库

        根据schema.xml中的规定,在每台服务器上创建目标数据库

3. 修改server.xml

        修改原先的server.xml的目标数据库

	<user name="root" defaultAccount="true"><property name="password">123888</property><property name="schemas">SHOPPING</property><!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 --><!-- 表级 DML 权限设置 --><!-- 		<privileges check="false"><schema name="TESTDB" dml="0110" ><table name="tb01" dml="0000"></table><table name="tb02" dml="1111"></table></schema></privileges>		--></user><user name="user"><property name="password">user</property><property name="schemas">SHOPPING</property><property name="readOnly">true</property></user>

4. 重启Mycat

        切换到mycat的安装目录

cd /usr/local/mycat/

        先停止 ,然后启动

#停止
bin/mycat stop#开始
bin/mycat statr

5. 查看启动日志

tail -100f logs/wrapper.log 

 

6. 上传sql脚本

        可以根据上述网盘地址找到数据库脚本

  • shopping-table.sql
  • shopping-insert.sql

上传至一个目录下

7.登录MyCat

mysql -h 192.168.154.135 -P 8066 -uroot -p123888

查看逻辑数据库,逻辑表(注意是逻辑上存在的,并不是实际存在的)

show databases;
use SHOPPING;
show tables;

8. 执行上传的脚本


source /usr/local/mydir/shopping-table.sqlsource /usr/local/mydir/shopping-insert.sql

9. 检验结果

        可以看到,数据已经分流到了各个数据库


全局表:

        上述已经完成了数据库的垂直分库,但是面临一个问题,跨服务器进行联表查询的时候会报错,如下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;

 

 

1. 概述 

  •  首先,在Mycat进行跨服务器进行联表查询是不可能的
  • 唯一的办法就是将该服务器用到的数据表,放到该服务器上,或者将每一个服务器都会用到的数据表做成全局表

2. 全局表步骤

        假如数据表tb_areas_provincestb_areas_citytb_areas_region每个服务器的数据库都会用到,那么我们就需要把他们做成全局表

(1) 停止Mycat
bin/mycat stop

(2) 清除各个服务器上shopping数据库中的表

 

(3)修改schema.xml
<table name="tb_areas_provinces" dataNode="dn1,dn2,dn3" primaryKey="id" type="global"/>
<table name="tb_areas_city" dataNode="dn1,dn2,dn3" primaryKey="id" type="global"/>
<table name="tb_areas_region" dataNode="dn1,dn2,dn3" primaryKey="id" type="global"/>

(4) 启动mycat
bin/mycat start

查看启动日志

tail -100f logs/wrapper.log

(5)登录Mycat,运行脚本
mysql -h 192.168.154.135 -P 8066 -uroot -p123888

选择数据库

 

use SHOPPING;

 

运行脚本 

source /usr/local/mydir/shopping-table.sqlsource /usr/local/mydir/shopping-insert.sql

可以看到,每一个服务器都有了这三张表

(6)执行联表查询

        然后再执行联表查询

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;

(7) 全局表的修改

        对于全局表的增删改,同样也会同步到每一个数据库上

http://www.lryc.cn/news/2397211.html

相关文章:

  • Rust 变量与可变性
  • 深入理解 C++ 中的 list 容器:从基础使用到模拟实现
  • 状态机实现文件单词统计
  • 从0开始学习R语言--Day13--混合效应与生存分析
  • 基于mediapipe深度学习的虚拟画板系统python源码
  • 复变函数 $w = z^2$ 的映射图像演示
  • Python实现P-PSO优化算法优化循环神经网络LSTM回归模型项目实战
  • 复合机器人:纠偏算法如何重塑工业精度与效率?
  • 审计- 1- 审计概述
  • 在MDK中自动部署LVGL,在stm32f407ZGT6移植LVGL-8.4,运行demo,显示label
  • 模块二:C++核心能力进阶(5篇) 篇一:《STL源码剖析:vector扩容策略与迭代器失效》
  • 计算机组成原理核心剖析:CPU、存储、I/O 与总线系统全解
  • 数据分类分级的实践与反思:源自数据分析、治理与安全交叉视角的洞察
  • 自动化立体仓库WCS的设计与实现
  • 百度蜘蛛池的作用是什么?技术@baidutopseo
  • 8.linux文件与文件夹内处理命令cp,mv,rm
  • JavaScript性能优化:实战技巧提升10倍速度
  • 核函数:解锁支持向量机的强大能力
  • UE5 2D地图曝光太亮怎么修改
  • C# 类和继承(基类访问)
  • 帕金森带来的生活困境
  • 集成测试的流程总结
  • Redis最佳实践——性能优化技巧之Pipeline 批量操作
  • Node.js 项目调试指南
  • win32相关(虚拟内存和物理内存)
  • Linux操作系统安全管理概述与命令操作
  • 《操作系统真相还原》——中断
  • [yolov11改进系列]基于yolov11引入特征融合注意网络FFA-Net的python源码+训练源码
  • 助力活力生活的饮食营养指南
  • 【软件测试】测试框架(unittest/pytest)