MySQL主从最全详解(原理 + 架构 + 实战)

MySQL主从是大型架构核心,下面我详解MySQL主从@mikechen

MySQL主从

MySQL主从的核心思想是:主库负责写入,从库负责同步主库的数据变更。

MySQL主从最全详解(原理 + 架构 + 实战)-mikechen

主库上的SQL操作并不会直接“同步执行”到从库,而是通过MySQL的二进制日志(binlog)作为中介。

将所有数据变更记录下来,再由从库去读取并重放这些日志,从而实现数据一致性。

MySQL主从架构常用于以下场景:

读写分离:主库写,从库读,提升系统吞吐量;

高可用容灾:主库故障时快速切换到从库;

数据备份:在从库上进行全量备份,减轻主库压力;

报表分析:将复杂查询放在从库,避免影响在线交易。

MySQL主从架构

一个标准的MySQL主从架构,通常由以下几个部分组成:

MySQL主从最全详解(原理 + 架构 + 实战)-mikechen

主库(Master):负责处理写请求,生成binlog。

从库(Slave/Replica):负责接收主库日志并执行复制,可承担读请求。

复制线程:包括主库的binlog dump线程,以及从库的IO线程和SQL线程。

业务应用层:通过读写分离中间件、代理层或代码逻辑,将写请求发送到主库,读请求发送到从库。

在实际生产环境中,往往不是简单的一主一从,而是一主多从结构。

这样做的好处是可以进一步提升读能力,并增强数据备份与容灾能力。

 

MySQL主从实现

实现MySQL主从架构,通常需要完成以下步骤。

MySQL主从最全详解(原理 + 架构 + 实战)-mikechen

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线程是否正常运行,以及延迟是否过大。

评论交流
    说说你的看法