建立项目文件夹
mkdir -p /data/docker/mst
创建docker-compose.yml文件内容如下:
master:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=123456
ports:
- "3306:3306"
volumes:
- ./mysql/data-master:/var/lib/mysql
command: mysqld --lower_case_table_names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --server-id=101 --log-bin=mysql-bin
slave:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=123456
ports:
- "3316:3306"
volumes:
- ./mysql/data-slave:/var/lib/mysql
command: mysqld --lower_case_table_names=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --server-id=102 --log-bin=mysql-bin --relay_log=relay-bin --read_only=on --super_read_only=on
启动主从数据库
docker-compose up -d
查看容器运行情况
docker-compose ps

登录主库操作:
#登录数据库,输入密码123456
docker exec -it mst_master_1 mysql -p
#关闭GROUP BY合法性检查
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
#创建备份账户,用户从库连接主库复制数据
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';
#显示主库状态,从库配置时需要该配置
show master status;

登录从库操作:
#连接登录从库,输入密码123456
docker exec -it mst_slave_1 mysql -p
#关闭GROUP BY合法性检查 SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
#设置被同步的主数据库
change master to master_host='192.168.56.101',master_user='backup',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=439;
#master_host为docker的地址不能写127.0.0.1,填写主数据库的服务器IP
#master_user是在主库创建的用于同步的用户
#master_log_pos是主库show master status;查询出的Position
#启动服务
start slave;
#查看服务状态
show slave status\G

Slave_IO_State状态为
Waiting for master to send event就是成功了
Connecting to master多半是连接不通
接下来我们测试一下主从同步情况,在主库创建测试数据
登录主库
docker exec -it mst_master_1 mysql -p
---创建数据库
CREATE DATABASE mst; USE mst;
---创建数据表
CREATE TABLE `tb_user` ( `id` int NOT NULL , `username` varchar(255) NULL , PRIMARY KEY (`id`) );
---插入测试数据
INSERT INTO `mst`.`tb_user` (`id`, `username`) VALUES ('1', 'itmx');
INSERT INTO `mst`.`tb_user` (`id`, `username`) VALUES ('2', 'tc');
INSERT INTO `mst`.`tb_user` (`id`, `username`) VALUES ('3', 'xiaomo');
登录从库
docker exec -it mst_slave_1 mysql -p
#查询测试表中的数据
SELECT * FROM `mst`.`tb_user`;
如果同步正常,从库执行sql会出现以下结果:

完事!