一、前言:
在企业应用中,成熟的业务通常数据量都比较大,单台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测试读写分离

