首先拉取docker镜像
docker pull mysql:8.0
用此镜像分别启动主从容器
Master
docker run -p 3337:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
Slave
docker run -p 3338:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
Master对外端口号是3337,Slave对外端口号为3338。
docker ps #查看正在运行的容器
拉取镜像后就可通过SQL图形化管理软件进行测试连接
配置Master节点
- 通过命令进入master容器内部
docker exec -it mysql1 /bin/bash
- 也可以通过容器id进入容器
docker exec -it b642a5baa128 /bin/bash
- 切换到/etc/mysql目录下 使用 vi my.cnf编辑my.cnf文件
cd /etc/mysql
会出现如下问题:
我们需要自行在docker中安装vim
apt-get install vim
- 出现这个问题需执行
apt-get update
再执行上面的代码即可安装vim。
在/etc/mysql目录下 编辑 vim my.cnf文件
[mysqld]
同一局域网内要唯一
server-id =100
开启二进制存储文件日志功能
log-bin=mysql-bin
- 配置完成后,需要重启容器
exit;
docker restart mysql1(容器名称)
重启完成后在Master节点数据库中创建数据同步用户,授予用户slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
配置Slave节点
- 和配置Master节点一样,在Slave配置文件my.cnf中:
[mysqld]
## 同一局域网内要唯一
server-id =101
## 开启二进制存储文件日志功能
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
- 配置完成后重启docker容器
在Master进入Mysql,执行
show master status;
在Slave中进入mysql中执行
change master to master_host='172.17.0.2',master_user='slave',master_password='root',master_port=3306,master_log_file='binlog.000003',master_log_pos=926,master_connect_retry=30;
- Master_host:通过命令查看容器独立IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id
-
Master_port:Master容器的端口号
-
Master_user:用于数据同步的用户
-
Master_password:用于同步用户的密码
-
Master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
-
Master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
-
Master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
在Slave中的mysql中执行
show slave status \G;
查看同步状态
- Yes即为成功