MySQL垂直分库(基于MyCat)

article/2025/6/25 5:47:59

参考资料:

参考视频

参考博客

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.hkcw.cn/article/sYLfUnvXRv.shtml

相关文章

MySQL 核心知识整理【一】

一、MySQL存储引擎对比&#xff1a;InnoDB vs MyISAM 在使用MySQL时&#xff0c;选择合适的存储引擎对性能影响很大。最常见的两个引擎是 InnoDB 和 MyISAM&#xff0c;它们各自的设计目标不同&#xff0c;适用场景也不一样。 事务与数据安全性方面&#xff0c;InnoDB 支持事…

MySQL下载安装配置环境变量

MySQL下载安装配置环境变量 文章目录 MySQL下载安装配置环境变量一、安装MySQL1.1 下载1.2 安装 二、查看MySQL服务是否启动三、配置环境变量四、验证 一、安装MySQL 1.1 下载 官网社区版&#xff08;免费版&#xff09;&#xff1a;https://dev.mysql.com/downloads/mysql/ …

火语言UI组件--文件夹对话框

【组件功能】&#xff1a;选择单个或多个文件的对话框。 样式预览 设置 基础设置 属性名称属性释义输入值类型标题(title)对话框的标题字符串类型默认路径(defaultPath)对话框的默认展示路径字符串类型多选(multiSelections)是否允许多选布尔型(true / false)显示隐藏文件(s…

海底三维可视化平台

1. 摘要 本文作者为视觉分析构建了一个真实海底的“虚拟世界”。在3D环境中导入底部轮廓。在该模型中&#xff0c;通过地震反射获得的海床地层剖面被数字化为离散点&#xff0c;并用克里金算法进行插值&#xff0c;以在每个地层中产生均匀的网格。然后在每一层构建 Delaunay三…

联合国裁员计划曝光 预算削减20%

多家媒体29日披露的联合国内部文件显示,联合国秘书处计划削减20%预算,并裁员6900人,约占员工总数的20%。根据法新社和路透社获取的联合国内部备忘录,负责财政事务的联合国助理秘书长钱德拉穆利拉马纳坦本周向各部门负责人发出信函,要求执行联合国秘书长安东尼奥古特雷斯提…

一村民鸡舍惊现50斤重蟒蛇 民警与捕蛇师傅联手救助

6月1日清晨,当小朋友们正享受儿童节的快乐时,五华县公安局丁畲派出所接到了村民温先生的紧急求助电话。温先生称自家鸡舍里钻进了一条大蛇,吓得鸡和鹅四处逃窜。接到报警后,丁畲派出所的值班民辅警迅速行动,并联系了专业的捕蛇师傅一同前往现场。到达后,他们发现大蛇蜷缩…

朋友圈哪些内容不能随便晒 保护隐私安全

端午假期即将来临,许多人计划出行并准备在朋友圈分享快乐。然而,过度分享可能带来隐私泄露的风险。有些内容不宜随意晒出。例如,火车票、飞机票、登机牌、家门钥匙、车牌等含有个人信息的物品,一旦发布,可能会被不法分子利用高科技手段窃取,导致个人隐私泄露。身份证、护…

火出圈的“苏超”不只是有梗 比赛第一,友谊第十四!

“友谊第一,比赛第二”这句话在江苏省首届城市足球联赛中被重新演绎为“比赛第一,友谊第十四”,这句口号迅速在网络上走红。这个被球迷称为“苏超”的足球联赛近日火出圈。“苏超”是江苏省体育局与各设区市政府联合主办的江苏省首届城市足球联赛,共有13个设区市派出队伍参…

电影《女足》杀青 星爷新作引期待

6月2日,周星驰执导的电影《女足》正式杀青。该片结合了少林功夫与足球元素,围绕女子足球队展开,讲述了一群热爱足球的女孩如何克服困难,追求梦想的故事。剧情紧凑,笑点与泪点并存,令人期待。全组历时3个月拍摄,迪丽热巴于6月2日完成个人戏份,其他主演如张小斐、张艺兴也…

6月起全国推广免陪照护服务 缓解家庭陪护压力

俗话说“久病床前无孝子”,这句话反映了家庭在面对病人陪护时的无奈与压力。特别是随着老龄化社会的到来以及独生子女政策的影响,父母住院时的陪护问题变得愈发困难。如果医院能够提供标准化的照护服务,将大大减轻家庭负担。国家卫健委等三部委近期印发了一份方案,计划于6月…

python打卡 DAY 19 常见的特征筛选算法

目录 特征筛选算法笔记 一、方差筛选 (Variance Threshold) 1.1 基本原理 1.2 实现代码 1.3 注意事项 二、皮尔逊相关系数筛选 2.1 基本原理 2.2 实现代码 2.3 优缺点 三、Lasso回归筛选 3.1 基本原理 3.2 实现代码 3.3 参数选择 四、树模型特征重要性 4.1 基本…

三菱整数乘法出现小数点的原因分析 以及工程设置

三菱 PLC 中出现30*100029999.994的计算误差&#xff0c;主要与浮点数在计算机中的二进制表示方式有关。以下是详细解释和解决方案&#xff1a; 原因分析 浮点数二进制存储的精度限制 浮点数&#xff08;如三菱 PLC 使用的 IEEE 754 单精度浮点数&#xff09;在计算机中以二进制…

Git 第三讲---核心篇 git的远程管理

前言&#xff1a; 在上一讲《Git 第二讲 — 提高篇&#xff1a;Git的分支管理》中&#xff0c;我们掌握了如何通过分支实现代码的并行开发&#xff0c;学会了创建、切换、合并分支以及解决冲突的核心技巧。分支管理是Git强大功能的基石&#xff0c;但它更多聚焦于本地仓库的操…

Java网络编程API 1

Java中的网络编程API一共有两套&#xff1a;一套是UDP协议使用的API&#xff1b;另一套是TCP协议使用的API。这篇文章我们先来介绍UDP版本的API&#xff0c;并尝试来写一个回显服务器&#xff08;接收到的请求是什么&#xff0c;返回的响应就是什么&#xff09;。 UDP数据报套…

window ollama部署模型

注意去官网下载ollama,这个win和linux差别不大,win下载exe,linux用官网提供的curl命令 模型下载表:deepseek-r1 使用命令:Ollama API 交互 | 菜鸟教程 示例: 1.查看已加载模型: 2.文本生成接口 curl -X POST http://localhost:11434/v1/completions -H "Conte…

MySQL安装及启用详细教程(Windows版)

MySQL安装及启用详细教程&#xff08;Windows版&#xff09; &#x1f4cb; 概述 本文档将详细介绍MySQL数据库在Windows系统下的下载、安装、配置和启用过程。 &#x1f4e5; MySQL下载 官方下载地址 官方网站: https://dev.mysql.com/downloads/社区版本: https://dev.my…

vscode中的markdown表格列宽

vscode中的markdown表格列宽 当然&#xff0c;这个问题在csdn中应该是没有的&#xff0c;csdn是自适应文档页面的。这个自适应在vscode中好像不太好实现&#xff0c;至少目前我没能实现。 表格生成如上图&#xff0c;缩在一起&#xff0c;当然也会随着表格中录入数据自适应…

CangjieMagic 智能体框架嵌入式系统实测:以树莓派 4B 为例

目录 引言 CangjieMagic 对嵌入式开发板的要求 编译环境准备 本地编译 交叉编译 实战测试 程序编写 对cjpm.toml文件的修改 运行结果 结束语 引言 在人工智能与物联网技术飞速发展的今天&#xff0c;嵌入式系统作为连接物理世界与数字世界的桥梁&#xff0c;承担着越…

数值与字典解决方案二十七讲:两列数据相互去掉重复值后合并

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

林夏薇否认破产传闻,已发律师声明回应 正交律师处理

近期,TVB“视后”林夏薇被一家公司向香港高等法院申请破产。根据司法机构资料,案件延期至8月26日下午在高等法院提讯。对于破产一事,林夏薇回应称:“我丈夫Jason租住房子的公司有官司,正在上诉中,所以我莫名其妙,现在已交给律师处理,我也没有收到任何通知。”5月30日,…