跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

MySQL 主从集群原理及 Docker 实战部署

MySQL 主从同步通过 Binlog 实现数据复制,支持读写分离、高可用及备份。常见模式包括异步、半同步、全同步及组复制。架构拓扑涵盖一主一从、一主多从、双主及级联等。同步原理与配置步骤,并提供基于 Docker 与 docker-compose 的主从集群搭建实战示例,包含权限设置、镜像构建及服务编排配置。

活在当下发布于 2026/3/16更新于 2026/5/2128 浏览
MySQL 主从集群原理及 Docker 实战部署

一、MySQL 主从同步原理

概念 主从同步(复制)通过从一个 MySQL 主节点复制到一个或多个从节点,将数据实时同步给从节点。

优势

  • 读写分离:主库负责写,从库负责读。主库故障时,从库可继续提供读取服务。
  • 性能提升:读写分工提高整体工作效率。
  • 数据备份:防止单点磁盘损坏导致数据丢失。
  • 高可用:主节点不可用时,可从节点提升为主节点快速恢复服务。

MySQL 主从同步架构图

Binlog(二进制日志)是 MySQL 服务器层面生成的逻辑日志,以二进制形式顺序记录所有对数据库的修改操作(数据或结构变更)。

三种日志格式

  • Statement:记录原始 SQL 语句,可能导致更新时间与原库不一致(如 update_time=now())。
  • Row:记录每行数据的变化,保证数据一致性,但数据量较大。
  • Mixed:混合模式,默认采用 Statement,涉及日期、函数时采用 Row,兼顾数据量与一致性。

二、主从同步的方式

2.1 全同步

主库提交事务时,必须等待所有从库都成功写入并执行该事务后,才向客户端返回成功。

  • 优点:强一致性。
  • 缺点:延迟大;任一从库挂掉会导致整个系统瘫痪。

2.2 异步方式

默认模式。主库提交事务不等待从库确认,写完本地 binlog 后立即返回成功。

  • 优点:主库写入速度最快;从库故障不影响主库。
  • 缺点:可能数据不一致;主机宕机可能丢数据。

2.3 半同步

介于异步和全同步之间。主库提交事务时,必须等待至少一个从库接收并写入 relay log 后,才返回成功。

  • 优点:一致性优于异步。
  • 缺点:性能低于异步;非强一致性(只保证到达,不保证执行);主机宕机可能出现数据不一致。

2.4 增强版同步

先确保从库把数据存到磁盘,再提交主库事务(传统半同步是先提交主库事务,再等从库确认)。

  • 优势:真正的零数据丢失;故障切换安全;性能损失极小。
  • 代价:比异步多一次网络往返;从库故障会短暂影响写入。

2.5 组复制

多个 MySQL 服务器像一个数据库一样工作,所有节点数据实时同步,任何写入需得到多数节点同意。

Master 1 执行:A 账户 -100,B 账户 +100
↓ certify 阶段:问其他节点'可以这样改吗?'
↓ Master 2 检查:A 余额够吗?B 账户存在吗?
↓ Master 3 检查:同一时间有别的人在改这些账户吗?
↓ 都回答'可以' → Consensus 层记录'已同意'
↓ 三节点同时:写 binlog 记录这个操作
↓ 三节点同时:实际修改 A 和 B 的余额
↓ Master 1 告诉客户端:转账成功

三、MySQL 主从架构的拓扑形式

3.1 一主一从

  • 优点:架构简单,维护容易,成本低。
  • 缺点:单点风险高,从库故障即失去备份。
  • 场景:小型项目、预算有限、仅需一个实时备份副本。

3.2 一主多从

  • 优点:强大的读扩展,负载均衡,高可用性,容灾能力强。
  • 缺点:主库写瓶颈,同步延迟差异,资源消耗大。
  • 场景:高并发读业务(电商、新闻),读写分离架构。

3.3 多主一从

  • 优点:集中分析,解耦业务库,资源隔离。
  • 缺点:数据冲突风险,一致性挑战,汇总库可能成为瓶颈。
  • 场景:中央报表系统,统一查询平台,历史数据分析。

3.4 双主复制

互为主从关系。

  • 优点:高可用性,理论上分担写负载。
  • 缺点:数据冲突风险,同步延迟,自增 ID 冲突。
  • 场景:同城双活数据中心,零停机升级。

3.5 级联复制

主库同步到一个从库,该从库再同步给下级从库。

  • 优点:减少主库压力,网络容错。
  • 缺点:延迟累积,维护成本高。
  • 场景:跨国企业多级同步,数据分析系统分发。

四、MySQL 主从集群搭建步骤

  1. 创建主库,并在主库中创建单独的 MySQL 用户用于同步数据,授予该用户数据同步权限。
  2. 创建从库,配置从库的数据同步的主库信息。
  3. 启动从库,开始同步。

五、实战示例

目录结构

mysql_master-slave
├── docker-compose.yaml
├── master
│   ├── Dockerfile-master
│   └── master.sql
└── slave
    ├── Dockerfile-slave
    └── slave.sql

master/master.sql

CREATE USER 'root'@'%' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
  1. 创建一个名为 root 的用户,允许从任何 IP 地址连接,密码设置为 root。
  2. 授予 'root'@'%' 用户对所有数据库的所有表的复制权限,使其能够作为从库连接到主库并复制数据,查看和监控复制状态。
  3. FLUSH PRIVILEGES:刷新/重新加载权限表。

master/Dockerfile-master

FROM mysql:5.7
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./master/master.sql /docker-entrypoint-initdb.d/

slave/slave.sql

CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='root', MASTER_PASSWORD='root', MASTER_PORT=3306;
START SLAVE;
  1. 配置从库连接到主库所需的所有参数(主机名、用户名、密码、端口)。
  2. 启动从库的复制进程。

slave/Dockerfile-slave

FROM mysql:5.7
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./slave/slave.sql /docker-entrypoint-initdb.d/

docker-compose.yaml

version: "3"
services:
  mysql-master:
    build:
      context: .
      dockerfile: ./master/Dockerfile-master
    image: mysqlmaster:v1.0
    restart: always
    container_name: mysql-master
    volumes:
      - ./master/varlib:/var/lib/mysql
    ports:
      - 9306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    privileged: true
    command: ['--server-id=1','--log-bin=master-bin','--binlog-ignore-db=mysql','--binlog_cache_size=256M','--binlog_format=mixed','--lower_case_table_names=1','--character-set-server=utf8','--collation-server=utf8_general_ci']

  mysql-slave:
    build:
      context: .
      dockerfile: ./slave/Dockerfile-slave
    image: mysqlslave:v1.0
    restart: always
    container_name: mysql-slave
    volumes:
      - ./slave/varlib:/var/lib/mysql
    ports:
      - 9307:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    privileged: true
    command: ['--server-id=2','--relay_log=slave-relay','--lower_case_table_names=1','--character-set-server=utf8','--collation-server=utf8_general_ci']
    depends_on:
      - mysql-master

  mysql-slave2:
    build:
      context: .
      dockerfile: ./slave/Dockerfile-slave
    image: mysqlslave:v1.0
    restart: always
    container_name: mysql-slave2
    volumes:
      - ./slave/varlib2:/var/lib/mysql
    ports:
      - 9808:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
    privileged: true
    command: ['--server-id=3','--relay_log=slave-relay','--lower_case_table_names=1','--character-set-server=utf8','--collation-server=utf8_general_ci']
    depends_on:
      - mysql-master

容器编排

  • 创建容器:docker compose build
  • 运行容器:docker compose up -d

目录

  1. 一、MySQL 主从同步原理
  2. 二、主从同步的方式
  3. 2.1 全同步
  4. 2.2 异步方式
  5. 2.3 半同步
  6. 2.4 增强版同步
  7. 2.5 组复制
  8. 三、MySQL 主从架构的拓扑形式
  9. 3.1 一主一从
  10. 3.2 一主多从
  11. 3.3 多主一从
  12. 3.4 双主复制
  13. 3.5 级联复制
  14. 四、MySQL 主从集群搭建步骤
  15. 五、实战示例
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Java 后端常见面试题及参考答案
  • OpenHarmony与华为云IoT智能家居开发指南
  • Java 刷题常用集合类、函数及类型转换指南
  • .NET 到 Java 迁移指南:思维转换与 Spring Boot 实战
  • GitHub Copilot 与 Claude Code 功能对比分析
  • 图数据结构详解:基于 Java 的雷达扫描系统实现
  • (第一篇)破冰篇:Spring AI 到底是什么?核心亮点拆解与实战指南
  • Ultrascale FPGA System Management Wizard 配置指南:温度电压监测
  • 基于 Web 的汽车销售系统设计与实现
  • CTF 夺旗赛入门教程:从零开始掌握网络安全竞技
  • 零成本实现个人项目公网访问:ngrok 前端穿透方案
  • Linux 系统学习:深入剖析 Git 原理与使用进阶
  • Floweb 超轻量级浮动浏览器功能解析
  • MCP 插件配置实战:browser-tools-mcp 示例
  • 前缀和算法原理与实战
  • OpenClaw、OpenAkita、MiniMax Agent 及 Kimi Claw 个人 AI 助手对比分析
  • Stable Diffusion v1.5 Archive 跨平台效果一致性保障与复现验证
  • CV-UNet 图像抠图 WebUI 快速部署指南
  • WSL 2 Ubuntu 22.04 安装及 D 盘迁移配置指南
  • 想成为黑客或信息安全从业者,该如何开始?

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online