docker compose 搭建MySQL主从复制
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
结构
创建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"
slave配置
[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"
docker-compose.yaml
version: "3"
services:
mysql-master:
image: mysql:8 # 镜像版本
container_name: mysql-master # 容器名称
ports:
- 3306: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:8
container_name: mysql-slave
ports:
- 3307:3307
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:
运行容器
docker-compose up -d
创建两个容器
首先进入master容器
docker exec -it mysql-master bash
注意:如果是mysql8.0版本需要修改加密方式 (否则Navicat连不上, 主从也会失败)
参考配置: https://www.cnblogs.com/shiysin/p/shiysin.html
# 创建用户mysql和密码123456
create user 'mysql'@'%' identified by '123456';
# 授权
grant replication slave on *.* to 'mysql'@'%';
# 刷新一下权限
flush privileges;
# 查看master节点状态
show master status;
#连接slave数据库
停止
stop slave;
设置连接master
change master to
master_host='mysql-master',
master_port=3306,
master_user='mysql',
master_password='123456',
master_log_file='mysql-bin.000003',
master_log_pos=3599;
启动同步
# 停止
stop slave;
#开始
start slave;
查看slave状态
show slave status;
或者
show slave status\G
成功
测试
在master中创建数据库:
create database mysql_db_test charset=utf8;
show databases;
在slave中
show databases;