
一、创建目录
mkdir -p master1-data master2-data
二、编写docker-compose.yml
version: '3.7'
services:
mysql-master1:
image: mysql:5.7.36
container_name: mysql-master1
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydb
volumes:
- ./master1-data:/var/lib/mysql
ports:
- "3306:3306"
command: --server-id=1 --log-bin=mysql-bin --gtid-mode=ON --enforce-gtid-consistency=ON
mysql-master2:
image: mysql:5.7.36
container_name: mysql-master2
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydb
volumes:
- ./master2-data:/var/lib/mysql
ports:
- "3307:3306"
command: --server-id=2 --log-bin=mysql-bin --gtid-mode=ON --enforce-gtid-consistency=ON
volumes:
master1-data:
master2-data:
三、拉取镜像
docker pull mysql:5.7.36

四、启动 Docker Compose
docker-compose up -d

五、初始化双主复制
1、在第一个主数据库上配置复制用户
docker exec -it mysql-master1 bash
mysql -u root -p
CREATE USER 'replica'@'%' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
2、在第二个主数据库上配置复制用户
docker exec -it mysql-master2 bash
mysql -u root -p
CREATE USER 'replica'@'%' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
3、在第一个主数据库上配置从第二个主数据库同步
docker exec -it mysql-master1 bash
mysql -u root -p
CHANGE MASTER TO
MASTER_HOST='mysql-master2',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
4、在第二个主数据库上配置从第一个主数据库同步:
docker exec -it mysql-master2 bash
mysql -u root -p
CHANGE MASTER TO
MASTER_HOST='mysql-master1',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
六、验证主从复制