docker compose up -d
docker ps
进入主库
docker exec -it mysql-master mysql --default-character-set=utf8mb4 -uroot -p123456
show variables like 'character_set%';
sql
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
得到:
File:
mysql-bin.000001
Position:
154
把这两个值记下来:
● File
● Position
进入从库:
docker exec -it mysql-slave mysql --default-character-set=utf8mb4 -uroot -p123456
输入密码:
123456
执行:
CHANGE MASTER TO
MASTER_HOST='host.docker.internal',
MASTER_PORT=3307,
MASTER_USER='repl',
MASTER_PASSWORD='repl123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
然后启动复制:
START SLAVE;
检查状态:
SHOW SLAVE STATUS\G
重点看这两个字段:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
配置主从成功
文件夹结构:

docker-compose.yml:
yaml
version: '3.8'
services:
mysql-master:
image: mysql:5.7.25
container_name: mysql-master
restart: always
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
- --server-id=1
- --log-bin=mysql-bin
- --binlog-format=ROW
- --default-time-zone=+08:00
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --skip-name-resolve
volumes:
- ./master/data:/var/lib/mysql
mysql-slave:
image: mysql:5.7.25
container_name: mysql-slave
restart: always
ports:
- "3308:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
- --server-id=2
- --log-bin=mysql-bin
- --relay-log=mysql-relay-bin
- --read-only=1
- --binlog-format=ROW
- --default-time-zone=+08:00
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --skip-name-resolve
volumes:
- ./slave/data:/var/lib/mysql