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 可以加密主从通信

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

相关推荐
·醉挽清风·2 分钟前
学习笔记—MySQL—库表操作
笔记·学习·mysql
灵犀学长8 分钟前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
北秋,28 分钟前
PostgreSQL(Postgres)数据库基础用法 + 数字型 + 字符型 完整联合注入实战
数据库·postgresql·开源
程序员陆业聪1 小时前
Compose Strong Skipping Mode 的真相:它并不会让你的类型变 Stable
android
m0_596749091 小时前
JavaScript中手动实现一个new操作符的底层逻辑
jvm·数据库·python
多加点辣也没关系1 小时前
Redis 的安装(详细教程)
数据库·redis·缓存
数据库小学妹2 小时前
数据库连接池避坑指南:告别“连接超时”与“资源耗尽”,让系统跑得更快!
数据库·redis·sql·mysql·缓存·dba
dishugj2 小时前
HANA 数据库备份与恢复
数据库·oracle
前进的李工2 小时前
EXPLAIN输出格式全解析:JSON、TREE与可视化
开发语言·数据库·mysql·性能优化·explain
达梦产品与服务2 小时前
稳扎稳打,持续迭代 | SQLark V3.10 更新,30+ 项优化与修复
mysql·oracle·达梦数据库·pg·sqlark百灵连接