MySQL主从是大型架构核心,下面我详解MySQL主从@mikechen
MySQL主从
MySQL主从的核心思想是:主库负责写入,从库负责同步主库的数据变更。

主库上的SQL操作并不会直接“同步执行”到从库,而是通过MySQL的二进制日志(binlog)作为中介。
将所有数据变更记录下来,再由从库去读取并重放这些日志,从而实现数据一致性。
MySQL主从架构常用于以下场景:
读写分离:主库写,从库读,提升系统吞吐量;
高可用容灾:主库故障时快速切换到从库;
数据备份:在从库上进行全量备份,减轻主库压力;
报表分析:将复杂查询放在从库,避免影响在线交易。
MySQL主从架构
一个标准的MySQL主从架构,通常由以下几个部分组成:

主库(Master):负责处理写请求,生成binlog。
从库(Slave/Replica):负责接收主库日志并执行复制,可承担读请求。
复制线程:包括主库的binlog dump线程,以及从库的IO线程和SQL线程。
业务应用层:通过读写分离中间件、代理层或代码逻辑,将写请求发送到主库,读请求发送到从库。
在实际生产环境中,往往不是简单的一主一从,而是一主多从结构。
这样做的好处是可以进一步提升读能力,并增强数据备份与容灾能力。
MySQL主从实现
实现MySQL主从架构,通常需要完成以下步骤。

1. 主库配置
主库需要开启binlog,并设置唯一的server-id。例如:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
2. 从库配置
从库同样需要设置不同的server-id,并开启复制相关参数。例如:
[mysqld]
server-id=2
relay-log=mysql-relay-bin
read-only=1
3. 创建复制账户
在主库上创建用于复制的账号,并授予复制权限:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
4. 初始化数据
通常需要先将主库当前数据完整导出,并导入到从库,以保证初始数据一致。可使用mysqldump或物理备份工具完成。
5. 配置复制关系
在从库上指定主库地址、复制账号、binlog位置或GTID模式,启动复制线程。
传统方式可能需要指定:
- 主库IP
- binlog文件名
- binlog偏移量
而GTID模式下,则配置更简洁,切换更方便。
6. 验证复制状态
通过以下命令检查复制是否正常:
SHOW SLAVE STATUS\G
重点关注IO线程和SQL线程是否正常运行,以及延迟是否过大。