MySQL 主从复制(小白友好 + 企业级)

主从复制(Master-Slave Replication)是 MySQL 最核心的高可用技术之一。

它的作用非常关键:

  • 主库负责写,从库负责读 → 读写分离

  • 从库可以做备份,不影响主库性能

  • 主库挂了可以切换到从库 → 高可用

  • 为分布式系统提供数据同步能力

1 主从复制原理(小白也能懂)

主从复制的核心流程只有三步:

复制代码
主库写 binlog → 从库 IO 线程拉取 → 从库 SQL 线程重放

我给你画成一个小白图:

复制代码
   ┌──────────────┐
   │   主库 Master │
   │ 写入 binlog   │
   └──────┬───────┘
          │
          ▼
   ┌──────────────┐
   │ 从库 IO 线程  │  拉取 binlog
   └──────┬───────┘
          │
          ▼
   ┌──────────────┐
   │ 从库 SQL 线程 │  重放 binlog
   └──────────────┘

三个关键组件:

组件 作用
binlog(主库) 记录所有写操作
IO 线程(从库) 从主库拉取 binlog
SQL 线程(从库) 执行 binlog,重放数据

2 主从复制的前置条件

主从复制要成功,必须满足:

✔ 1. 主库开启 binlog

在主库的 my.cnf:

复制代码
server-id=1
log-bin=mysql-bin
binlog_format=ROW

✔ 2. 从库有唯一 server-id

复制代码
server-id=2

✔ 3. 主库创建复制用户

复制代码
CREATE USER 'repl'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

✔ 4. 主从时间一致(建议使用 UTC 或 +08:00)

3 Docker 环境下的主从部署

下面是一个简化版的 docker-compose:

复制代码
services:
  mysql-master:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: 111111
    volumes:
      - ./master/my.cnf:/etc/mysql/conf.d/my.cnf
      - master_data:/var/lib/mysql

  mysql-slave:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: 111111
    volumes:
      - ./slave/my.cnf:/etc/mysql/conf.d/my.cnf
      - slave_data:/var/lib/mysql

4 主从配置流程(最关键)

MySQL 主从复制笔记-CSDN博客

5 主从复制的模式(你需要知道)

模式 说明
基于文件位置(经典) 现在用的方式
GTID 模式(更现代) 企业级推荐

6 主从复制 + TLS

MySQL 主从复制 + TLS 加密笔记-CSDN博客

本章总结

  • 主从复制依赖 binlog

  • 主库写 binlog → 从库 IO 拉取 → SQL 重放

  • 主从必须有不同 server-id

  • 主库必须开启 binlog

  • 从库通过 CHANGE MASTER TO 连接主库

  • Slave_IO_Running / Slave_SQL_Running 都为 Yes 才算成功

  • TLS 可以加密主从通信

  • 主从复制是高可用、读写分离、备份的基础

相关推荐
雨落在了我的手上7 分钟前
MySQL数据库基础(9):数据库设计
数据库·mysql
SelectDB9 分钟前
Doris 日志检索与聚合速查:索引参数、MATCH 写法和验收清单
大数据·数据库·数据分析
zcn12610 分钟前
union与in结合用法优化
数据库·sql优化改写
xuxigifxfh21 分钟前
面试记录2026
java·mysql·面试·职场和发展
砚凝霜28 分钟前
【软考信息安全】第二十章 数据库安全机制与主流数据库防护
数据库
高级程序源42 分钟前
springboot荆州旅游推介平台24175-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·django·课程设计
wdfk_prog1 小时前
LWIP教程 10:从 `tcp_receive()` 到 `ooseq` / SACK——TCP 乱序、重组与选择确认
网络·数据库·tcp/ip
狼与自由1 小时前
Mysql 3种日志的区别
数据库·mysql
linweidong1 小时前
Redis 集群故障排查与修复实战:从 Connection refused 到内存打满的七个现场
运维·数据库·redis·缓存·redis集群·运维面经·实施面经
StackTraces1 小时前
从零跑通 Meilisearch 本地搜索服务:6 步,外加 4 个容易卡住的地方
数据库·后端