本文最后更新于45 天前,其中的信息可能已经过时,如有错误请发送邮件到2327470875@qq.com
1.安装Docker
详见https://zero-zl.cn/index.php/2025/08/12/%e5%ae%89%e8%a3%85docker%e5%ae%b9%e5%99%a8/
2.创建专用网络
docker network create mysql-net
3.建配置目录(主+从)
mkdir -p ~/mysql/{master,slave1,slave2}/{conf,data}
4.写配置文件
主库my.cnf
cat > ~/mysql/master/conf/my.cnf <<'EOF'
server-id=1 log-bin=mysql-bin binlog-format=ROW bind-address=0.0.0.0 EOF 从库1my.cnf cat > ~/mysql/slave1/conf/my.cnf <<'EOF'
server-id=2 relay-log=mysql-relay-bin bind-address=0.0.0.0 EOF 从库2 my.cnf cat > ~/mysql/slave2/conf/my.cnf <<'EOF'
[mysqld]
server-id=3
relay-log=mysql-relay-bin
bind-address=0.0.0.0
EOF
5.启动三台容器
主库
docker run -d --name mysql-master --network mysql-net \
-e MYSQL_ROOT_PASSWORD=root123 \
-p 3307:3306 \
-v ~/mysql/master/conf:/etc/mysql/conf.d \
-v ~/mysql/master/data:/var/lib/mysql \
mysql:8.0
从库1
docker run -d --name mysql-slave1 --network mysql-net \
-e MYSQL_ROOT_PASSWORD=root123 \
-p 3310:3306 \
-v ~/mysql/slave1/conf:/etc/mysql/conf.d \
-v ~/mysql/slave1/data:/var/lib/mysql \
mysql:8.0
从库2
docker run -d --name mysql-slave2 --network mysql-net \
-e MYSQL_ROOT_PASSWORD=root123 \
-p 3311:3306 \
-v ~/mysql/slave2/conf:/etc/mysql/conf.d \
-v ~/mysql/slave2/data:/var/lib/mysql \
mysql:8.0
6.主库创建复制账号
docker exec mysql-master mysql -uroot -proot123 -e "
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root123';
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'repl123';
GRANT REPLICATION SLAVE ON . TO 'repl'@'%';
FLUSH PRIVILEGES;"
7.获取binlog坐标
docker exec mysql-master mysql -uroot -proot123 -e "SHOW MASTER STATUS\G"
8.两台从库指向主库
从库1(“MASTER_LOG_POS=“的值换成binlog坐标”Position:“具体的值)
docker exec mysql-slave1 mysql -uroot -proot123 -e "
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='repl',
MASTER_PASSWORD='repl123',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=157;
START SLAVE;"
库2也是一样
docker exec mysql-slave2 mysql -uroot -proot123 -e "
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='repl',
MASTER_PASSWORD='repl123',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=157;
START SLAVE;"
9.验证同步
docker exec mysql-slave1 mysql -uroot -proot123 -e "SHOW SLAVE STATUS\G" | grep -E "Slave_IO_Running|Slave_SQL_Running"
docker exec mysql-slave2 mysql -uroot -proot123 -e "SHOW SLAVE STATUS\G" | grep -E "Slave_IO_Running|Slave_SQL_Running"
10.看到从库1和从库2都有两个yes就说明配置成功了