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测试读写分离
相关推荐
梁bk1 小时前
Redis 通信协议(RESP)
数据库·redis·缓存
思成不止于此1 小时前
MySQL 约束详解:保证数据完整性的核心机制
数据库·笔记·学习·mysql
伐尘1 小时前
【MySQL】windows系统下mysql慢日志查询
windows·mysql·adb
理想三旬1 小时前
数据定义:模式、表、索引
数据库
c***87191 小时前
讲解进阶之路:模块、包和异常处理-上篇
数据库·redis·哈希算法
!chen2 小时前
Oracle分区表+本地索引 核心优化方案
数据库·oracle
叽里咕噜怪2 小时前
MySQL-读写分离实验
数据库·mysql
生产队队长2 小时前
Database:PLSQL中文乱码(查询显示问号???、表注释显示问号???)
数据库
饕餮争锋2 小时前
SQL LIKE 语句中下划线“_”是通配符
数据库·sql