Mysql主从复制与读写分离测试

一、前言:

在企业应用中,成熟的业务通常数据量都比较大,单台MySQL在安全性、 高可用性和高并发方面都无法满足实际的需求,配置多台主从数据库服务器以实现读写分离。

二、主从复制原理

2.1 MySQL的复制类型

  • 基于语句的复制(STATEMENT, MySQL默认类型)
  • 基于行的复制(ROW)
  • 混合类型的复制(MIXED)

2.2 MySQL主从复制的工作过程

主-从进行复制

1、为什么复制 ? 保证数据完整性

2、谁复制谁? slave角色复制master 角色的数据

3、数据放在哪?二进制文件中

4、 mysql-bin.000001 -> 混合类型的复制(MIXED) 记录完整的sql

5、slave 复制 二进制文件的日志到本地的节点,保存为中继日志方式

2.2.1核心重点

1、两个日志

① 二进制日志

② 中继日志

2、三个线程

① dump线程

② I/O 线程

③ sql线程

2.3 MySQL 有几种同步方式: 三种

1、异步复制(Async Replication)

2、同步复制(sync Replication)

3、半同步复制(Async Replication)

4、增强半同步复制(lossless Semi-Sync Replication)、无损复制

2.3.1、异步复制(Async Replication)
  • 特点 MySQL 默认的复制方式。主库执行事务后,仅将事务写入 binlog 就向客户端返回 "成功",不等待从库接收或应用 binlog
  • 优缺点 **:**性能最好,但主库宕机时可能丢失未同步的 binlog,数据一致性风险最高
2.3.2、同步复制(Sync Replication)
  • 特点 主库执行事务后,需等待至少一个从库完成 binlog 的应用(落地到磁盘),才向客户端返回 "成功"。
  • 优缺点 **:**数据一致性最强,但性能损耗最大,适用于对数据零丢失要求极高的场景。
2.3.3、半同步复制(Semi-Sync Replication)
  • 特点 主库执行事务后,需等待至少一个从库接收 binlog 并写入 relay log(且发送确认信号),才向客户端返回 "成功";若超时则降级为异步复制。
  • 优缺点 **:**数据一致性比异步高,性能略低于异步,避免了主库宕机导致的大量数据丢失。
2.3.4、增强半同步复制(lossless Semi-Sync Replication、无损复制)

三、主从复制测试

整个测试的环境 以及服务器信息

  • 环境部署 cetos7.7
  • 虚拟机服务环境
    • Master服务器:10.0.0.3mysql5.7
    • slave1服务器:10.0.0.21mysql5.7
    • Slave2服务器:10.0.0.22 mysql5.7

3.1、主从服务器时间同步

3.1.1 master服务器配置

环境前准备部署

① 安装ntp、修改配置文件

yum -y install ntpdate ntp #安装ntp软件

ntpdate ntp.aliyun.com #时间同步

② 开启NTP服务、关闭防火墙和增强性安全功能

systemctl start ntpd

3.1.2 两台SLAVE服务器配置

① 安装ntp、ntpdate服务

yum install ntp ntpdate -y

② 开启ntp服务,关闭防火墙、增强性安全功能

③ 时间同步master服务器

ntpdate 10.0.0.3

④ 两台slave服务器配置相同

ntpdate ntp.aliyun.com (外网)

ntpdate 10.0.0.3 (内网)

#周期性计划 每10分钟同步一次主机时间

crontable -e

*/10 * * * * /usr/sbin/ntpdate 192.168.10.16

3.2、配置主从同步

① master服务器修改配置文件

重启服务

systemctl restart mysqld

②进入mysql,给两个slave数据库权限

mysql > GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'10.0.0.%' IDENTIFIED BY '123456';

#刷新权限列表

mysql> flush privileges;

#查看master数据库状态

mysql> show master status;

  • 可见产生了master-bin.000001日志文件,定位为154
  • 从服务器需要定位到此处进行复制

③从服务器配置 10.0.0.21 10.0.0.22 设置都是一样的

④开启从服务器功能

mysql -uroot -p

四、读写分离测试

整个测试的环境以及服务器信息

  • 环境部署 cetos7.6
  • 虚拟机服务环境
    • Master服务器:10.0.0.3
    • slave1服务器:10.0.0.21
    • slave2服务器:10.0.0.22
    • Amoeba服务器:10.0.0.10 jdk1.6、Amoeba

客户端服务器:10.0.0.10 mysql 测试

注:做读写分离测试之前必须有一 主 两从 环境

4.1搭建 MySQL读写分离

4.1.1 Amoeba服务器配置----
4.1.2测试读写分离
相关推荐
阿坤带你走近大数据10 小时前
怎么查看当前oracle库下的表空间temp大小或者默认大小
数据库·oracle
yoyo_zzm10 小时前
Laravel8.x新特性全解析
数据库·nginx
码界奇点11 小时前
基于Python的新浪微博数据爬虫系统设计与实现
数据库·爬虫·python·毕业设计·新浪微博·源代码管理
我科绝伦(Huanhuan Zhou)12 小时前
探索技术世界:我的GitHub数据库工具宝库
数据库·github
猫的玖月12 小时前
(一)MY SQL概述
数据库·sql
脑子进水养啥鱼?13 小时前
PostgreSQL .history 文件
数据库·postgresql
倔强的石头_13 小时前
5 个真实案例带你避坑:DolphinDB 实时写入、流订阅与高可用调优
数据库
虹科网络安全13 小时前
艾体宝新闻|Redis 月度更新速览:2026 年 3 月
数据库·redis·缓存
Nturmoils13 小时前
DolphinDB 实时时序数据处理踩坑实录:5 类生产故障排查与优化
数据库
csdn2015_14 小时前
postgresql 拼接字段
数据库