-
简化部署:Docker可以提供快速、一致的部署环境,使得在不同的机器上搭建MySQL主从变得简单和可重复。
-
灵活性:通过Docker容器,可以轻松地进行水平扩展和垂直扩展,根据需要增加或减少MySQL实例数量。
-
高可用性:使用主从复制可以提高系统的可用性。当主数据库发生故障时,从数据库可以接管并继续提供服务。
下面是基于Docker搭建MySQL主从的大致步骤:
-
安装Docker:首先需要在相关服务器上安装Docker。
-
创建MySQL主容器:使用Docker命令创建一个MySQL主容器,配置相应的参数,比如MySQL版本、端口等。
-
配置主数据库:在主容器中打开MySQL配置文件,启用二进制日志(binlog),并设置唯一的服务器ID。
-
创建MySQL从容器:使用Docker命令创建一个MySQL从容器,同样配置相应的参数,并设置与主数据库相同的版本和端口。
-
配置从数据库:在从容器中打开MySQL配置文件,配置从数据库要连接的主数据库信息,包括主数据库的IP地址、端口号和用户名密码等。
-
启动容器:分别启动主数据库容器和从数据库容器。
-
配置主从关系:在主数据库中创建一个用于复制的用户,并为该用户授权。然后在从数据库中配置复制连接信息。
-
启动主从复制:在从数据库容器中启动复制过程,将从数据库作为从服务器连接到主数据库,并开始同步数据。
首先拉取docker镜像,我这里使用的是mysql的5.7版本
docker pull mysql:5.7
拉取完成之后我们docker ps 查看一下
接下来就是运行我们的mysql容器
docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
这是运行我们的mysql的主库命令
同样的方式我们再来运行一下我们的从库,这里注意,我们的名称跟映射端口要更换
docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
然后再执行docker ps查看一下成没成功,运没运行
接下来我们进入到主库开始搭建主从复制
docker exec -it master /bin/bash
-
docker exec
:执行Docker容器内部的命令。 -
-it
:使用交互式终端(Interactive TTY)模式来执行命令,即在当前终端会话中启动一个新的bash终端。 -
master
:要进入的容器名称或ID。这里假设已经创建了一个名为"master"的MySQL主容器。 -
/bin/bash
:要在容器内部执行的命令,这里是启动一个bash终端。
接下来我们来修改容器内部的my.cnf的文件来做主从,修改文件的内容实际跟普通的主从方式是一样的
打开my.cnf文件
会发现我们没有yum,也没有vim,这时,我们来执行yum update
当执行 yum update
命令时,它会尝试从网络上获取最新的软件包以更新容器内的软件,执行完之后根据个人的需求看需不需要来执行yum -y install epel-release 来拓展一下源软件包
接下来就下载vim
再去修改配置文件,master的my.cnf文件修改如下
修改完成之后切记要进行重启,使配置文件生效
当然,我们在重启之前,对master还需做一些操作,去创建我们的主从用户 ,创建完成之后去进行重启,重启之后记得进去执行以下show master status\G,我忘记截图了,大家别忘了,待会在下方认证时有用
docker restart master
slave的配置文件修改如下
跟上方一样改完配置文件重启,重启完成之后我们来认证主从
在认证主从的时候,容器内的指向IP与普通的不一样,我们需要去查看一下
docker inspect --format='{ {.NetworkSettings.IPAddress}}' master
获取之后再去认证
change master to
master_host='172.18.0.2',
master_user='slave',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000001', master_log_pos= 769,
master_connect_retry=30;
该指令就不解释了,跟普通的操作一样,就一个master_connect_retry是指定的刷新时间,30S
接下来启动slave即可,去查看主从状态
start slave;
没有问题,主从搭建完成,资源紧缺,才在一台服务器上搭建的这么一个主从,有需要的话照搬就可以了