news 2026/6/15 19:03:59

MySQL读写分离实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL读写分离实验

MyCAT 核心作用

MyCAT 是一款基于 MySQL 协议的开源分布式数据库中间件,核心定位为 “数据库代理”,主要解决单库单表性能瓶颈、数据量过载、高并发访问等问题,对应用端透明(无需大幅改造应用即可接入),是分布式数据库架构的核心组件,核心作用如下:

1. 分库分表(数据分片)—— 核心核心能力

当单 MySQL 数据库数据量达到千万 / 亿级、或并发压力过高时,单库性能急剧下降。MyCAT 支持:

  • 水平分片:按行拆分数据(如按用户 ID、时间范围、地区等维度),将海量数据分散到多个物理数据库节点;
  • 垂直分片:按业务模块 / 列拆分(如订单表、用户表分至不同库);
  • 自动处理分片路由、跨分片聚合查询(如跨节点 count/sum 计算),突破单库存储和性能上限。

2. 读写分离

针对 “读多写少” 的业务场同时可配置主从数据同步策略,保障数据一致性。景,MyCAT 可将写操作(insert/update/delete)路由到主库,读操作(select)分发到多个从库,实现读写请求分流,提升整体并发处理能力,

3. 负载均衡

对分片后的多数据库节点、读写分离的从库节点实现请求负载均衡,避免单个节点因请求过载宕机,提升数据库集群的可用性和稳定性。

4. 故障自动切换

内置数据库节点健康检测机制,当主库 / 从库节点故障时,MyCAT 可自动将请求路由到备用节点,实现故障 “无感切换”,减少业务中断时间,提升系统高可用。

5. 统一数据访问入口

对应用端屏蔽底层分布式数据库的复杂架构,应用只需连接 MyCAT 一个入口,即可访问分散在多个节点的分片数据,无需关注数据物理存储位置,降低应用开发和维护成本。

6. 权限与安全管控

集中管理数据库访问权限,细粒度控制不同应用对不同分片数据的读写权限,避免直接暴露底层数据库节点,提升数据安全;同时支持 SQL 拦截、优化,降低非法 / 低效 SQL 对集群的影响。

适用场景

广泛应用于电商、金融、政务、互联网等数据量大、高并发的业务系统,也可适配国产化数据库生态(如结合达梦、人大金仓等国产数据库实现分布式部署)。

用到了mycat中间件,gtid主从复制

读写分离步骤

  1. 【mycat】vim /etc/my.cnf关闭binlog日志

  2. 【mycat】解压jdk-8u压缩包到/usr/local目录下

  3. 【mycat】解压Mycatserver压缩包到/usr/local目录下

  4. 【mycat】/usr/local目录下使用vim编辑/etc/profile

  5. 【mycat】source重新加载/etc/profile

  6. 【mycat】检查Java版本

  7. 【mycat】到/usr/local/mycat木录下开启mycat

  8. 【写主机】进入本机mysql

  9. 【写主机】grant授权让mycat主机能登录写主机数据库

  10. 【写主机】刷新授权

  11. 【写主机】创建一个实体数据库

  12. 【读主机】进入本机MySQL

  13. 【读主机】grant授权让所有主机能登录读主机数据库

  14. 【读主机】刷新授权

  15. 【读主机】创建实体库

  16. 【mycat】回到mycat机器

  17. 【mycat】进入/usr/local/mycat/conf,找到.server.xml,schema.xml,备份

  18. 【mycat】vim编辑server.xml

  19. 【mycat】vim编辑schema.xml

  20. 【mycat】pkill -9杀死Java有关的进程

  21. 【mycat】重启mycat /usr/local/mycat/bin/mycat,查看8066端口是否运行

  22. 【mycat】登录mycat数据库,验证虚拟数据库是否存在

主从复制步骤(gtid方式)

  1. 【主】配置域名解析

  2. 【主】配置/etc/my.cnf

  3. 【主】创建目录:/var/log/mysqld,更改目录权限

  4. 【主】重启mysqld服务

  5. 【主】进入数据库,授权某个用户主从复制的权限

  6. 【主】刷新授权

  7. 【从】配置/etc/my.cnf

  8. 【从】重启mysqld服务

  9. 【从】进入数据库做change master主从复制权限

  10. 【从】开启slave

  11. 【从】查看slave状态有没有双yes

前提条件

centos7操作系统,三台部署MySQL5.7的机器,mycat机器,写机器,读机器

Mycat机器:

[root@mycat ~]# vim /etc/my.cnf #关闭binlog日志,log-bin=/var/log/mysql/mysql-bin注释掉 [root@mycat ~]# tar xf jdk-8u211-linux-x64.tar.gz -C /usr/local #解压jdk文件 [root@mycat ~]# cd /usr/local/ [root@mycat local]# ls jdk1.8.0_211/bin/ |grep java [root@mycat local]# vim /etc/profile export JAVA_HOME=/usr/local/jdk1.8.0_211/bin export PATH=$PATH:/usr/local/jdk1.8.0_211/bin [root@mycat local]# source /etc/profile #重新加载 /etc/profile 配置文件 [root@mycat local]java -version [root@mycat ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/ [root@mycat ~]# cd /usr/local/mycat [root@mycat mycat]# /usr/local/mycat/bin/mycat start

写主机

[root@write ~]# mysql -pst #登录数据库 mysql> grant all on testdb.* to xie@'%' identified by 'xie@123'; #只能让mycat主机登录,%写成IP地址 mysql> flush privileges; mysql> create database testdb;

读主机

登录本机数据库 mysql> grant all on testdb.* to du@'%' identified by 'Du@123'; mysql> flush privileges; mysql> create database testdb;

mycat主机

[root@mycat mycat]# cd conf [root@mycat conf]# ls #查看是否有server.xml和schema.xml [root@mycat conf]# cp server.xml server.xml.bak [root@mycat conf]# cp schema.xml schema.xml.bak [root@mycat conf]# vim server.xml

[root@mycat conf]# vim schema.xml

[root@mycat conf]# pkill -9 java [root@mycat conf]# /usr/local/mycat/bin/mycat start [root@mycat conf]# ss -tanlp | grep 8066 #查看8066端口是否启用 [root@mycat conf]# mysql -h 192.168.200.30 -u root -p123456 -P 8066 #登录Mycat用户的数据库(虚拟数据库) 查看数据库,尝试使用数据库,查看的快了就是成功了,查看的延迟三十秒左右就是失败了

此时,mycat主机创建一个表,写主机也会同步出一个表

接下来做复制

写主机

vim /etc/hosts #配置域名解析

[root@read ~]# vim /etc/my.cnf #设置数据库的主从复制

mkdir /var/log/mysqld #创建log-bin的目录 chown -R mysql.mysql /var/log/mysqld #更改目录属于mysql [root@read ~]# systemctl restart mysqld mysql -pstp mysql> grant replication slave on *.* to alan@"%" identified by 'alan'; #创建一个名为 alan 的数据库用户,并授予该用户进行主从复制(replication)的权限 mysql> flush privileges; #刷新权限

读主机

[root@read ~]# vim /etc/my.cnf #做slave配置

[root@read ~]# systemctl restart mysqld [root@read ~]# mysql -pst [root@read ~]\e

mysql> start slave; mysql> show slave status\G #显示出两个yes Slave_IO_Running: Yes Slave_SQL_Running: Yes

最后,在Mycat机器上创建一个数据表,写主机和读主机都会同步出来,成功

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 22:19:45

CFD: 曲线坐标网格(Curvilinear Grids)资料

文章目录一、基本理论背景1. 坐标变换原理2. 控制方程在曲线坐标下的形式3. 优势与挑战二、经典理论参考资料三、支持曲线坐标网格的开源 CFD 项目1. **Nek5000 / NekRS**2. **OpenFOAM(部分功能)**3. **CFL3D(NASA)**4. **OVERFL…

作者头像 李华
网站建设 2026/6/15 14:22:59

AList多平台一键部署指南:新手也能轻松搭建个人云盘

AList多平台一键部署指南:新手也能轻松搭建个人云盘 【免费下载链接】alist 项目地址: https://gitcode.com/gh_mirrors/alis/alist 在数字化时代,我们的文件往往分散在不同的云存储平台中,阿里云盘、百度网盘、OneDrive等各有千秋&a…

作者头像 李华
网站建设 2026/6/15 20:01:16

Wish跨境电商平台研究指南:十款实用工具助力市场与算法分析

在专注于移动端与算法驱动的全球电商领域,Wish平台以其独特的推荐机制、极具价格竞争力的商品和庞大的新兴市场用户基础,成为观察兴趣电商、下沉市场消费及算法治理的典型样本。该平台为研究者理解基于行为的商品推荐、超低价跨境供应链及特定用户群体的…

作者头像 李华
网站建设 2026/6/14 18:54:24

终极指南:如何使用ApiTestEngine快速构建自动化API测试

终极指南:如何使用ApiTestEngine快速构建自动化API测试 【免费下载链接】httprunner 项目地址: https://gitcode.com/gh_mirrors/ap/ApiTestEngine ApiTestEngine是一个开源的API测试引擎,专为开发者和测试工程师设计,旨在提供高效、…

作者头像 李华
网站建设 2026/6/15 18:55:45

从蓝队打杂到日薪 2700,护网 5 个核心工具让甲方主动抛橄榄枝

一、护网第 3 天,我因为工具用得好,被甲方单独加了 500 日薪 去年第一次参加护网,我跟个无头苍蝇似的 —— 甲方让 3 小时内梳理 100 台服务器资产,别人用 Excel 手动录 IP,我用 Nmap 批量处理脚本,1 小时…

作者头像 李华
网站建设 2026/6/13 22:03:33

PlayCover完整指南:在Mac上运行iOS应用的终极配置方案

PlayCover完整指南:在Mac上运行iOS应用的终极配置方案 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover 本指南将详细介绍如何在Apple Silicon Mac设备上通过PlayCover运行iOS应用&#xff0…

作者头像 李华