news 2026/5/7 19:32:02

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/4/23 14:32:10

AI导演助手来了!next-scene模型带你玩转电影级视觉叙事

AI导演助手来了!next-scene模型带你玩转电影级视觉叙事 【免费下载链接】next-scene-qwen-image-lora-2509 项目地址: https://ai.gitcode.com/hf_mirrors/lovis93/next-scene-qwen-image-lora-2509 你是否曾经为创作动态故事板而头疼?想要制作电…

作者头像 李华
网站建设 2026/5/3 9:22:05

Calendar.js终极指南:零依赖JavaScript日历的快速上手指南

想要一个既强大又简单的JavaScript日历库吗?Calendar.js就是你的完美选择!作为一款完全零依赖的响应式日历,它能让你在几分钟内就拥有专业级的日程管理功能。 【免费下载链接】Calendar.js 📅 A javascript drag & drop event…

作者头像 李华
网站建设 2026/4/30 12:27:56

智慧楼宇中的工业网关发挥哪些作用

在智慧楼宇中,工业网关作为连接设备、网络与云平台的核心枢纽,通过协议转换、数据采集、边缘计算、安全通信和云平台对接等功能,实现了楼宇设备的智能化控制、能源的高效管理以及运维的自动化,具体作用如下:1. 协议转换…

作者头像 李华
网站建设 2026/4/30 16:23:25

OpenXR工具包深度实战:从性能瓶颈到流畅体验的技术突破

OpenXR工具包作为企业级VR应用开发的核心解决方案,在应对复杂渲染场景和跨平台兼容性挑战方面展现出突破性价值。该项目通过API层架构和模块化设计,为技术决策者提供了从性能优化到输入系统增强的完整技术栈。 【免费下载链接】OpenXR-Toolkit A collect…

作者头像 李华
网站建设 2026/5/1 8:02:32

.NET驾驭Word之力:基于规则自动生成及排版Word文档

MudTools.OfficeInterop 是一个针对 Microsoft Office 应用程序(Excel、Word、PowerPoint、VBE)的 .NET 封装库,旨在简化对 Office COM 组件的操作。它提供现代化、面向对象的 API 接口,使得开发者可以更轻松地处理 Office 文档。…

作者头像 李华
网站建设 2026/5/3 10:30:26

复杂知识简单学!Springboot加载配置文件源码分析

Springboot 加载配置文件源码分析 本文的分析是基于springboot 2.2.0.RELEASE。 本篇文章的相关源码位置:https://github.com/wbo112/blogdemo/tree/main/springbootdemo/springboot-profiles springboot加载配置文件如application.yml是通过org.springframework.boot.context.…

作者头像 李华