
「一、写在前面:为啥你必须学MYSQL主从复制?」
DBA这条路,最重要的核心能力之一就是能部署出一个「高可用、可扩展、安全的数据架构」。
别怕,听起来高大上,其实就是搞清楚一台MySQL(主库)写入数据,另外几台(从库)自动同步的逻辑。
条件 | 是否具备? |
|---|---|
已配置免密登录 | ✅(你说的已经配置好了) |
每台机器已装 Docker | ✅ |
每台机器 Docker 已有 MySQL 镜像(比如 mysql:8.0) | ✅ |
防火墙(firewalld)已关闭或开放3306端口 | ⚠️需要确认! |
你能执行 Shell 脚本,熟悉基本命令 | ✅ |
接下来我们搭建如下的 MySQL 主从复制架构:
「主库:」master 「从库:」node1、node2
主库上的数据写入后,将通过二进制日志(binlog)同步给两个从库,实现实时或延迟复制。
【MySQL主从复制机制图】

我们采用 Docker 来部署三个 MySQL 实例,并配置主从复制功能。整个流程分五步:
登录 master 机器,运行如下命令:
docker run -d \
--name mysql-master \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /opt/mysql-master/conf:/etc/mysql/conf.d \
-v /opt/mysql-master/data:/var/lib/mysql \
mysql:8.0
接着,创建配置文件 /opt/mysql-master/conf/my.cnf:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=testdb
注意:server-id 不能重复,主库设置为 1,从库设置为 2、3。
重启容器让配置生效:
docker restart mysql-master
进入主库容器:
docker exec -it mysql-master bash
mysql -uroot -p123456
在 mysql 命令行中执行:
CREATEUSER'repl'@'%' IDENTIFIED WITH mysql_native_password BY'replpass';
GRANT REPLICATION SLAVE ON*.*TO'repl'@'%';
FLUSH PRIVILEGES;
然后查看当前 binlog 状态:
SHOW MASTER STATUS;
记下文件名和位置,比如:
File | Position |
|---|---|
mysql-bin.000001 | 154 |

docker run -d \
--name mysql-slave1 \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /opt/mysql-slave1/conf:/etc/mysql/conf.d \
-v /opt/mysql-slave1/data:/var/lib/mysql \
mysql:8.0
配置 /opt/mysql-slave1/conf/my.cnf:
[mysqld]
server-id=2
relay-log=relay-log
read-only=1
重启容器:
docker restart mysql-slave1
⚠️ node2 机器执行相同步骤,server-id=3,端口改成3308,文件夹用
/opt/mysql-slave2/

进入 node1 的容器:
docker exec -it mysql-slave1 bash
mysql -uroot -p123456
配置复制参数:
CHANGE MASTER TO
MASTER_HOST='你的master主机IP',
MASTER_USER='repl',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
启动复制:
START SLAVE;
查看复制状态:
SHOW SLAVE STATUS\G
正常情况下,
Slave_IO_Running和Slave_SQL_Running都应该是 Yes。
在 master 中创建数据库和表:
CREATE DATABASE testdb;
USE testdb;
CREATETABLE t_user (id INTPRIMARY KEY, name VARCHAR(20));
INSERTINTO t_user VALUES (1, 'ITxianyu');
然后登录 node1、node2 检查:
SELECT*FROM testdb.t_user;
如果看到了 ITxianyu这一行,就说明主从复制配置成功啦!


检查 binlog 文件名、位置是否正确;网络是否能 ping 通主机如果你能理解本文内容并亲手搭建成功,恭喜你,离成为“靠谱的DBA”更近了一步!