下载安装docker desktop
官网地址
拉取mysql镜像
docker pull mysql:5.7
运行两个容器
主数据库
docker run -d -p 3333:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
从数据库
docker run -d -p 3334:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
查看运行的容器
docker ps
查看master容器IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' master
修改mysql配置文件
进入容器
docker exec -it master /bin/bash
ls
cd etc
ls
这里的my.cnf就是数据库配置
容器没有编辑器修改,复制到本地
复制容器内文件到本地
docker cp master:/etc/my.cnf D:\mysql\master
修改完成以后复制本地文件到容器
docker cp D:\mysql\master\my.cnf master:/etc
修改内容:
master
[mysqld]
server-id=101
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
secure_file_priv=/var/lib/mysql
#设置密码规则
default_authentication_plugin=mysql_native_password
#最大连接数设置 根据实际需要 自行调整
max_connections=1000
slave
[mysqld]
server-id=102
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
secure_file_priv=/var/lib/mysql
#设置密码规则
default_authentication_plugin=mysql_native_password
#最大连接数设置 根据实际需要 自行调整
max_connections=1000
修改完成以后重启两个容器
docker restart master slave
设置主从复制
进入master容器数据库
docker exec -it master /bin/bash
mysql -uroot -p123456
建立帐户并授权 slave
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
查看master状态
show master status;
记录File和Position的值
记住不要对master数据库进行其他修改操作,否则File和Position的值会发生变化
进入slave容器数据库
docker exec -it slave /bin/bash
mysql -uroot -p123456
复制主机命令
CHANGE MASTER TO MASTER_HOST='172.17.0.2',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1045;
MASTER_HOST: master数据库IP地址
MASTER_LOG_FILE:master数据库File
MASTER_LOG_POS: master数据库Position
启动从服务器复制功能
start slave;
查看从服务器状态
show slave status\G;
这两条都为Yes,说明成功,通过navicat,操作master服务器新增数据库,表,数据时,slave服务器会相应的生成数据库,表和数据