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测试读写分离
相关推荐
0xDevNull3 小时前
MySQL数据冷热分离详解
后端·mysql
科技小花4 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸4 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain4 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希4 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神4 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员4 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java5 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿5 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴5 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存