1.首先拉取docker镜像,我们这里使用5.7版本的mysql:
docker pull mysql:5.7
这里遇到了(镜像源的问题):
-
修改 Docker 配置文件:
- 以 root 用户登录到您的容器引擎所在的虚拟机。
- 修改或创建
/etc/docker/daemon.json
文件,添加如下内容(替换“加速器地址”为您实际获取的地址):{ "registry-mirrors": ["加速器地址"] }
- 例如,如果您的加速器地址是
https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com
,则配置文件应如下所示:{ "registry-mirrors": ["https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com"] }
-
重启 Docker 服务:
- 配置完成后,执行以下命令以重启 Docker 服务:
systemctl restart docker
- 配置完成后,执行以下命令以重启 Docker 服务:
2.使用此镜像启动容器,这里需要分别启动主从两个容器
Master(主):
docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
Slave(从):
docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
此时可以使用Navicat等工具测试连接mysql(用服务器ip)
3.进入主 容器
docker exec -it master /bin/bash
cd /etc/mysql
yum install vim
vim my.cnf
这里出现vim的安装问题
(
apt-get update
apt-get install vim
)
复制以下代码到my.cnf中
[mysqld]
server-id=100
log-bin=mysql-bin
停止容器 docker stop master
下一步重启mysql
service mysql restart
启动主容器 docker start master
查看容器的ip地址 docker inspect --format='{{.NetworkSettings.IPAddress}}' master
下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
docker exec -it master /bin/bash
mysql -uroot -p123456
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
最后先查看主mysql信息状态:
show master status
4.进入从容器
和配置Master(主)一样,在Slave配置文件my.cnf中添加如下配置:
docker exec -it slave /bin/bash
cd /etc/mysql
vim my.cnf
[mysqld]
server-id=101
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin
这里出现(vim)每一个容器是一个单独的ip,资源不互通,所以需要重新
apt-get update
apt-get install vim
跟主容器一样
停止容器 docker stop slave
下一步重启mysql
service mysql restart
启动主容器 docker start slave
之后进入从容器:
docker exec -it slave /bin/bash
mysql -uroot -p123456
在Slave 中进入 mysql
**master_port**:Master的端口号,指的是容器的端口号
**master_user**:用于数据同步的用户
**master_password**:用于同步的用户的密码
**master_log_file**:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
**master_log_pos**:从哪个 Position 开始读,即上文中提到的 Position 字段的值
**master_connect_retry**:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
change master to master_host='172.17.0.2',
master_user='slave',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000001',(注意这里就是主容器中的log日志信息)
master_log_pos= 617,
master_connect_retry=30;
在Slave 中的mysql终端执行
show slave status \G;
用于查看主从同步状态。