Docker部署MySQL主从复制

相关概念:DockerMySQL

如果只是本地实验或小规模环境,Docker 方式搭一主一从是很省心的。

基本结构

最小可用通常就是:

  • 1 个 master
  • 1 个 replica

核心不是“容器能不能起来”,而是:

  • 配置文件是否正确分开
  • 主从 server_id 是否不同
  • binlog 和复制用户是否准备好

配置文件里的关键项

主库:

server_id=1
log-bin=mysql-bin
read-only=0

从库:

server_id=2
log-bin=mysql-bin
read-only=1

如果只是练习主从复制,先把系统库排除掉会更省事。

启动容器时的经验

比起“命令能运行”,更重要的是目录结构和容器命名是否清晰。

因为主从环境后面排查问题时,会频繁做这些事:

  • 看配置文件
  • 看数据目录
  • 进容器执行 SQL
  • 重置复制关系

命名乱了,后面维护成本会持续升高。

主从复制的最小步骤

1. 主库创建复制账号

CREATE USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
FLUSH PRIVILEGES;

2. 查看主库位点

SHOW MASTER STATUS;

3. 从库指向主库

CHANGE MASTER TO
  master_host='nas.me',
  master_user='slave1',
  master_password='123456',
  master_port=4306,
  master_log_file='mysql-bin.000003',
  master_log_pos=1582;

4. 启动并检查复制状态

START SLAVE;
SHOW SLAVE STATUS\\G

判断是否成功

最实用的观察点还是这两个:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

如果这里不是 Yes,先不要急着改命令,优先看错误信息。

提醒

这类部署更适合实验、学习和局部工具环境。真正生产环境里,复制拓扑、故障切换和持久化边界都需要再认真设计。