zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

docker mysql 主从复制

mysqlDocker 主从复制
2023-09-14 09:09:37 时间

 

 1.环境准备:
alpine-linux x86_64 3.8
docker-ce  18
mysql 5.7

配置软件源  docker加速器什么的就不再说了 直接开始搭建mysql 主从复制

2. 拉取镜像
docker pull mysql:5.7

运行一个实例:
master: 端口是3339   密码 1-6

docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 

slave:端口是3340  密码1-6
docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 

docker ps  检查正在运行的容器


此时可以使用Navicat等工具测试连接mysql

3.配置
master :

docker exec -it 9b321bb7d73c /bin/bash
 apt-get update && apt-get install vim -y

vim /etc/mysql/my.cnf

添加如下内容:
[mysqld]
server-id=100   局域网内唯一就行
log-bin=mysql-bin  二进制日志功能 这步很关键


service mysql restart

然后容器就自动退出了

docker restart 9b321bb7d73c 重启下 运行起来

再次进入容器:
docker exec -it 9b321bb7d73c /bin/bash

登陆mysql
创建数据库用户并授权  用于复制
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

 

 

 

slave:

docker exec -it 6734835934c5  /bin/bash

apt-get update && apt-get install vim -y

vim /etc/mysql/my.cnf

添加如下内容:

[mysqld]

server-id=101

log-bin=mysql-slave-bin  开启二进制日志功能,以备Slave作为其它Slave的Master时使用

relay_log=edu-mysql-relay-bin  relay_log配置中继日志

 

service mysql restart 

 重启容器:

docker restart 6734835934c5

 

4.链接master和slave

master:

进入容器登陆mysql:

执行:show master status;

记录下File和Position字段 的值

我这里  file 是mysql-bin.000001   position  是617

slave :

进入容器登陆mysql:

执行:
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= 617, master_connect_retry=30;

 

这条命令说明:

master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

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;用于查看主从同步状态

正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;

 

SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功

tags:

参考链接:https://www.linuxidc.com/Linux/2018-07/153268.htm