基于docker搭建MySql主从数据库(详细步骤)

操作步骤

一、准备工作

  1. 在 Linux 中建立对应文件夹,用于存放MySql数据库相关,文件夹路径:/usr/local/software/mysql
  2. 在mysql文件下创建如下目录结构的文件:(3306为主数据库文件夹,笔者这里以对端口号来命名;3310为从数据库文件夹,3311同理,可依次往下)
    文件夹结构树状图
  3. 上传 my.cnf 文件到 conf 文件夹下
    上传my.cnf文件
    以下是 my.cnf 文件的内容:
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

#
# The MySQL  Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password

# Custom config should go here
!includedir /etc/mysql/conf.d/

server_id=200

  1. 将my.cnf文件拷贝到 3310/conf3311/conf 目录下,目录结构如下:
    目录结构图

  2. 查询 mysql 镜像
    对应的docker指令: docker search mysql
    查询镜像

  3. 拉取 mysql 镜像到本地
    对应的docker指令:docker pull mysql
    拉取镜像

  4. 检查是否下载成功
    对应的docker指令:docker image ls

查询镜像是否下载成功

  1. 在 docker 中创建运行 mysql 的容器

docker run
-i:以交互模式运行容器
-t:为容器重新分配一个伪输入终端
—name :容器名称
—privileged: 设置容器公开权限(默认为true)
-p :映射端口 linux端口: 容器内置端口(mysql默认端口为3306)
-v : linux挂载文件夹/文件和容器内路径的映射
-e: 容器的环境变量(设置mysql默认用户名&密码)
-d: 后台运行容器,并返回容器ID

docker run -it \
--name mysql_3306 \    #数据库名称
--privileged \
-p 3306:3306 \         #对应端口号
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \   
-d mysql

以下是代码运行后的界面,出现一串无序字符代表创建成功。

在这里插入图片描述

  1. 进入 mysql 容器
    进入我们上一步创建好的 mysql 容器 ,对应指令:docker exec -it mysql_3306 bash

docker exec
-it:以交互模式运行容器 ,为容器重新分配一个伪输入终端。
bash: bash(GNU Bourne-Again Shell)是最常用的一种shell(运行在终端的互动程序)。

成功进入容器后,前缀会变化,如图所示:
在这里插入图片描述

  1. 在容器中运行mysql客户端
    完成上述步骤后,我们已经成功在 docker 中创建了能够运行 mysql 的容器,接下来可以在 docker 中运行 mysql 客户端了。
    输入对应指令,登录 mysql 客户端:mysql -u用户名 -p密码
    运行MySql客户端
    退出 mysql 客户端的指令:quit
    退出容器的指令:exit
    退出

  2. 防火墙开放端口
    这里如果不开放端口,会导致外部无法访问。

开放指定端口:
对应指令:firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd —zone=public —add-port=端口号/tcp —permanent
—zone: public 公开端口
—add-port: 端口号/协议名称
—permanent: 永久开放

修改防火墙配置后,要重新加载防火墙:firewall-cmd --reload
查看开放的端口号的指令:firewall-cmd --zone=public --list-ports

  1. Navicat 测试连接
    第一步:打开 Navicat,新建连接。
    新建连接
    第二步:输入对应信息,点击测试连接。弹出连接成功后即可!
    输入配置
    注意这里的主机为运行 docker 的虚拟机的 IP。

二、搭建 MySql 主数据库(master)

  1. 配置 my.cnf 文件,配置完毕后重启 docker。

通过 vim my.cnf 修改 my.cnf 文件,在文件末尾加入以下程序:

server_id=200                        #服务器id
log_bin=mysql-bin                    #binlog名称
binlog_format=row                    #binlog的格式
  1. 创建与从数据库(slave)进行服务通信的用户
    第一步:在 Navicat 中,新建查询。
    新建查询
    第二步:输入以下mysql语句,并运行。
-- 创建用户 slave --
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password by '123';

-- 给用户授权 --
GRANT replication SLAVE,replication client ON *.* TO 'slave'@'%';

-- 应用权限 --
FLUSH PRIVILEGES;

运行成功

  1. 查询 master 状态
    在查询中输入show master status
    查询master状态

  2. 获取 master IP地址
    输入指令:docker inspect mysql_3306 |grep IPA
    查询master的ip

三、搭建 MySql 从数据库(slave)

  1. 配置 mysql/3310 路径下的 my.cnf 文件,配置完毕后重启 docker。

通过 vim my.cnf 修改 my.cnf 文件,在文件末尾加入以下程序:

server_id=201      #每个服务器的id都是唯一的,必须进行修改!
log_bin=mysql-slave01-bin
relay_log=wnhz-relay-bin
read_only=1        #从数据库不需要进行增删改等写入操作,所以设为只读
  1. 创建运行从数据库(slave)的容器
docker run -it \
--name mysql_3310 \
--privileged \
-p 3310:3306 \
-v /usr/local/software/mysql/3310/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3310/data:/var/lib/mysql \
-v /usr/local/software/mysql/3310/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql

这里要注意从数据库的路径与名称都需要进行修改!
以下是代码运行后的界面,出现一串无序字符代表创建成功。
创建slave容器

  1. 开放防火墙端口
    这一步在上面已经执行过相似的操作,这里同上。
    打开对应端口:firewall-cmd --zone=public --add-port=3310/tcp --permanent
    重新加载防火墙:firewall-cmd --reload

  2. Navicat 测试连接
    这一步操作也与之前相同,这里也不再过多赘述,直接上图。
    slave测试

  3. 关联从数据库(slave)与主数据库(master)
    进入从数据库(slave)容器中,输入对应指令 。

change master to
master_host='172.17.0.3',
master_user='slave',
master_password='123456',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=855;

这里的 master_host 对应之前查询的 master 的 IP 地址。
关联主从

  1. 开启从数据库(slave)
    start slave;
    开启slave

  2. 查询 slave 状态
    show slave status \G;
    配置成功

  3. 功能测试
    在主数据库中建表,查看从数据库中是否会自动生成相同的表 。

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
基于DockerMySQL主从数据库配置需要完成以下步骤: 1. 启动Master(主)容器:使用命令`docker run -p 3306:3306 --name main_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7`启动一个MySQL容器,并设置容器名称为main_mysql,密码为123456。 2. 连接到Master(主)容器:使用命令`docker exec -it main_mysql bash`进入Master(主)容器的命令行界面。 3. 配置Master(主):在Master(主)容器内部,编辑MySQL配置文件`my.cnf`,将`bind-address`设置为Master(主)容器的IP地址。 4. 重启Master(主)容器:使用命令`docker restart main_mysql`重启Master(主)容器使配置生效。 5. 启动Slave(从)容器:使用命令`docker run -p 3340:3306 --name slave_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7`启动一个MySQL容器,并设置容器名称为slave_mysql,密码为123456。 6. 连接到Slave(从)容器:使用命令`docker exec -it slave_mysql bash`进入Slave(从)容器的命令行界面。 7. 配置Slave(从):在Slave(从)容器内部,编辑MySQL配置文件`my.cnf`,将`bind-address`设置为Slave(从)容器的IP地址,并添加以下配置: ``` server-id = 2 relay-log = /var/lib/mysql/mysql-relay-bin relay-log-index = /var/lib/mysql/mysql-relay-bin.index log_slave_updates = 1 ``` 8. 重启Slave(从)容器:使用命令`docker restart slave_mysql`重启Slave(从)容器使配置生效。 9. 在Slave(从)容器内部执行以下命令连接到Master(主)容器并设置复制: ``` CHANGE MASTER TO MASTER_HOST='<Master(主)容器的IP地址>', MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0; ``` 10. 启动复制:在Slave(从)容器内部执行命令`START SLAVE;`启动主从复制。 11. 检查主从复制状态:在Slave(从)容器内部执行命令`SHOW SLAVE STATUS\G;`,确保"Slave_IO_Running"和"Slave_SQL_Running"都为"YES",表示主从复制已成功配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crazy keyboard

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值