1. 创建master的conf配置文件
[mysqld]
# 同一个主从模式下,id不能相同
server-id = 1
# 设置同步的文件名
log-bin=mysql-bin
# 防止出现1055异常
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
2. 创建slave的conf配置文件
[mysqld]
# 同一个主从模式下,id不能相同
server-id = 2
# 防止出现1055异常
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
3. 创建docker-compose.yml文件
version: "3"
services:
mysql-master:
image: mysql:5.7.32 # 镜像版本
container_name: mysql-master # 容器名称
ports:
- 3307:3306 # 端口映射
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456 # root用户密码
volumes:
- ./master/data:/var/lib/mysql # data文件映射
- ./master/mysql.cnf:/etc/mysql/conf.d/mysql.cnf # 配置文件映射
networks:
- mysql-network # 网络名称
mysql-slave:
image: mysql:5.7.32
container_name: mysql-slave
ports:
- 3308:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
volumes:
- ./slave/data:/var/lib/mysql
- ./slave/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
networks:
- mysql-network
networks:
mysql-network:
4. 构建容器
若 dockek-compose build
没有问题,就 docker-compose buid -d
构建
5. 连接master数据库
# 创建用户mysql和密码123456
create user 'mysql'@'%' identified by '123456';
# 授权
grant replication slave on *.* to 'mysql'@'%';
# 刷新一下权限
flush privileges;
# 查看master节点状态
show master status;
- show master status; 执行结果
6. 连接slave数据库
# 停止
stop slave;
# 设置连接master
change master to
master_host='mysql-master', # 主库的IP,因为使用了docker所以使用服务名来当主机名
master_user='mysql', # 主库同步的用户
master_password='123456', # 主库同步的用户密码
master_port=3306, # 主库的端口
master_log_file='mysql-bin.000003', # 同步的文件
master_log_pos=741; # 开始从第几行同步
# 启动同步
start slave;
# 查看slave状态
show slave status;
- show slave status;配置成功结果
若Slave_IO_Running显示其他状态,请查看Last_IO_Errno和Last_IO_Error
若Slave_SQL_Running显示其他状态,请查看Last_SQL_Errno和Last_SQL_Error
7. 其他
docker-compose stop
停止容器
docker-compose rm
移除容器