MySQL 8.0 主从复制原理分析与实战
MySQL复制技术深度解析:从原理到实践
一、MySQL复制概述
MySQL复制(Replication)是官方提供的主从同步方案,用于将一个MySQL实例数据同步到其他实例,是最广泛使用的容灾方案。
核心概念
- 源(Source):旧称Master,数据变更的源头
- 副本(Replica):旧称Slave,接收源数据的节点
- 同步方式:默认异步,也可配置半同步
二、复制原理与架构
1. 复制工作流程
2. 数据同步类型对比
类型 | 特点 | 数据一致性 | 性能影响 |
---|---|---|---|
异步复制 | 默认方式,主从不互相等待 | 可能丢失数据 | 影响最小 |
半同步复制 | 主库等待至少1个从库确认 | 较强一致性 | 中等影响 |
延迟复制 | 从库故意延迟指定时间 | 最终一致 | 影响较小 |
三、复制配置实战
1. 基于binlog位点的配置
主库关键配置:
[mysqld]
server-id = 10
log-bin = mysql-bin
binlog_format = ROW
从库关键步骤:
CHANGE REPLICATION SOURCE TOSOURCE_HOST='192.168.65.185',SOURCE_USER='fox',SOURCE_PASSWORD='123456',SOURCE_PORT=3307,SOURCE_LOG_FILE='mysql-bin.000003',SOURCE_LOG_POS=1273;
START REPLICA;
2. 半同步复制配置
主从节点均需安装插件:
-- 主库
INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so';
SET GLOBAL rpl_semi_sync_source_enabled=1;-- 从库
INSTALL PLUGIN rpl_semi_sync_replica SONAME 'semisync_replica.so';
SET GLOBAL rpl_semi_sync_replica_enabled=1;
关键参数说明:
rpl_semi_sync_source_wait_for_replica_count
:等待的从库数量rpl_semi_sync_source_wait_point
:等待时机(AFTER_SYNC/AFTER_COMMIT)
四、GTID复制方案
1. GTID核心优势
- 自动定位复制位置,无需手动指定binlog文件及位置
- 保证事务全局唯一性,避免重复执行
- 简化故障转移和主从切换流程
2. 配置要点
[mysqld]
gtid_mode = ON
enforce_gtid_consistency = ON
从库配置命令:
CHANGE REPLICATION SOURCE TOSOURCE_HOST='192.168.65.185',SOURCE_USER='fox',SOURCE_PASSWORD='123456',SOURCE_PORT=3307,SOURCE_AUTO_POSITION=1;
五、组复制(Group Replication)
1. 核心特点
- 基于Paxos协议实现分布式状态机
- 支持单主和多主模式
- 自动故障检测与成员管理
- 多数节点存活即可提供服务(3节点容错1个)
2. 单主模式配置示例
[mysqld]
plugin_load_add = 'group_replication.so'
group_replication_group_name = "117dc7ea-b9bd-11ee-9bdb-0242ac120002"
group_replication_start_on_boot = off
group_replication_local_address = "mgr-node1:33061"
group_replication_group_seeds = "mgr-node1:33061,mgr-node2:33061,mgr-node3:33061"
六、应用场景与选型建议
1. 典型应用场景
- 电商平台:读写分离提升并发能力
- 社交网络:快速读取+数据备份
- 金融系统:数据安全与高可用保障
- 新闻媒体:应对高访问量压力
2. 技术选型矩阵
需求场景 | 推荐方案 |
---|---|
最高性能 | 异步复制 |
强一致性 | 半同步复制 |
自动容灾 | 组复制(MGR) |
多活架构 | 多主模式组复制 |
七、常见问题处理
1. GTID复制中断修复
-- 跳过特定GTID事务
STOP REPLICA;
SET @@SESSION.GTID_NEXT='aac92b21-b6a4-11ee-bab5-0242ac120002:7';
BEGIN; COMMIT;
SET SESSION GTID_NEXT=AUTOMATIC;
START REPLICA;
2. 主从切换演练要点
- 验证从库数据完整性
- 提升新主库读写权限
- 其他从库指向新主库
- 监控复制延迟情况