mycat之分表分库

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: mycat,分表分库
环境:master192.168.225.128  slave192.168.225.129
masterslave上面各有两个数据库db01,db02。users表存放在db01,db02中都有,但是不做分表,查询随机发送到哪台服务器。item表其中一部分数据存放在master的db02中,另一部分数据存放在slave的db02中。
item_detail依赖父表进行分片(也即E-R分片策略),两个表的关联关系为t_user_detail.user_id=t_user.id。分片规则用取模的方式,如果在分表的时候还要做读写分离,只需要在writeHost下面添加readhost选项即可。
AI 代码解读

1,mycat安装部署

参考上一篇博文:
link

2,修改配置文件

[root@slave conf]# cat schema.xml
<?xml version="1.0"?>  
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">  
<mycat:schema xmlns:mycat="http://io.mycat/">
 
   <!-- 设置表的存储方式.schema name="TESTDB" 与 server.xml中的 TESTDB 设置一致  -->  
   <schema name="MYDB" checkSQLschema="false" sqlMaxLimit="100">  

   <!-- global表示全局表,即表示users表所有记录都在node_db01中,不做拆分,如果user表很小,当业务需要这个表和其他大表进行join的时候,也可以-->
                    <!--将这个users表在每个库中都保存一份,只需要在node_db01后面添加其他的库名即可。-->  
       <table name="users" primaryKey="id" type="global" dataNode="node_db01" />
       <table name="item" primaryKey="id" dataNode="node_db02,node_db03" rule="mod-long">  
               <childTable name="item_detail" primaryKey="id" joinKey="item_id" parentKey="id" />  
       </table>  
   </schema>  
 
   <!-- 设置dataNode 对应的数据库,及 mycat 连接的地址dataHost -->  
    <dataNode name="node_db01" dataHost="dataHost01" database="db01" />
   <dataNode name="node_db02" dataHost="dataHost01" database="db02" />  
   <dataNode name="node_db03" dataHost="dataHost02" database="db02" />  
 
   <!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->  
   <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">  
           <heartbeat>select user()</heartbeat>  
           <writeHost host="slave" url="192.168.225.129:3306" user="root" password="123456"/>  
   </dataHost>  
<dataHost name="dataHost02" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
           <heartbeat>select user()</heartbeat>
           <writeHost host="master" url="192.168.225.128:3306" user="root" password="123456"/>
   </dataHost>
</mycat:schema>  
AI 代码解读

3,测试:

create database db01;  
create database db02;  
 
CREATE TABLE users (  
   id INT NOT NULL AUTO_INCREMENT,  
   name varchar(50) NOT NULL default '',  
   indate DATETIME  default null,  
   PRIMARY KEY (id)  
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;  
 
CREATE TABLE item (  
   id INT NOT NULL AUTO_INCREMENT,  
   value INT NOT NULL default 0,  
   indate DATETIME default  NULL ,
   PRIMARY KEY (id)  
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;  
 
CREATE TABLE item_detail (  
   id INT NOT NULL AUTO_INCREMENT,  
   value INT NOT NULL default 0,  
   name varchar(50) NOT NULL default '',  
   item_id INT NOT NULL,  
   PRIMARY KEY (id),  
   key (item_id)  
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;  


#mysql -umy -p123456 -h192.168.225.129 -P8066
>insert into item(id,value,indate) values(1,100,now());  
>insert into item_detail(value,name,item_id) values('40','pad',1);  
>insert into item(id,value,indate) values(2,100,now());  
>insert into item_detail(value,name,item_id) values('50',phone,2);
AI 代码解读

*实际生产环境:
** 在实际中ip1和ip2是主从关系,假设dataHost01对应db1,dataHost02对应db2,这样ip1和ip2中存储了db1的分片数据,ip3中存储了db2的分片数据,在写操作的时候,mycat会将对应数据写入ip1,通过主从通过到ip2, 另一部分数据写入ip3
在读操作的时候,mycat会从ip2和ip3中获取对应数据合并后返回客户端。配置如下:

   <!-- mycat 逻辑主机dataHost对应的物理主机.其中也设置对应的mysql登陆信息 -->  
   <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">  
           <heartbeat>select user()</heartbeat>  
           <writeHost host="slave" url="192.168.225.129:3306" user="root" password="123456"/>  
       <readHost host="third" url="192.168.225.130:3009" user="root" password="123456"/>
   </dataHost>  
<dataHost name="dataHost02" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
           <heartbeat>select user()</heartbeat>
           <writeHost host="master" url="192.168.225.128:3306" user="root" password="123456"/>
   </dataHost>
</mycat:schema>  
AI 代码解读
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
1
分享
相关文章
kde
|
12天前
|
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
8222 49
|
9天前
typora免费版,激活方法,Typora使用教程
Typora是一款简洁高效的Markdown编辑器,支持即时渲染。本教程涵盖安装方法、文件操作、视图控制、格式排版、字体样式及Markdown语法,助你快速上手使用Typora进行高效写作。
2163 4
Dify MCP 保姆级教程来了!
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
2034 30
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
1128 5
【保姆级图文详解】大模型、Spring AI编程调用大模型
【保姆级图文详解】大模型、Spring AI编程调用大模型
793 10
【保姆级图文详解】大模型、Spring AI编程调用大模型
Windows安装Claude Code
Claude Code 是 Anthropic 推出的代码助手,支持在 Windows 通过 WSL(Windows Subsystem for Linux)运行。本文介绍如何在 Windows 系统中启用 WSL、安装 Ubuntu 子系统、配置 Python 与 Node.js 环境,并最终安装和运行 Claude Code。内容涵盖 WSL 设置、开发工具安装、依赖配置及常见问题解决方法,助你顺利在本地环境中使用 Claude Code 提升编码效率。
439 0
Windows安装Claude Code
从混乱到有序:2025年10+拯救多项目管理的专业工具指南
本文全面解析智能组合管理的技术架构与算法创新,涵盖数据感知、优化计算到决策应用的全链条。介绍动态贝叶斯网络优化框架及多项目协同资源调度模型,并结合工具,展示智能工具在研发与项目管理中的前沿应用,助力组织实现高效协同与持续优化。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等