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

操作步骤

一、准备工作

  1. 在 Linux 中建立对应文件夹,用于存放MySql数据库相关,文件夹路径:/usr/local/software/mysql
  2. 在mysql文件下创建如下目录结构的文件:(3306为主数据库文件夹,笔者这里以对端口号来命名;3310为从数据库文件夹,3311同理,可依次往下)
    基于docker搭建MySql主从数据库(详细步骤)_第1张图片
  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 目录下,目录结构如下:
    基于docker搭建MySql主从数据库(详细步骤)_第2张图片

  2. 查询 mysql 镜像
    对应的docker指令: docker search mysql
    基于docker搭建MySql主从数据库(详细步骤)_第3张图片

  3. 拉取 mysql 镜像到本地
    对应的docker指令:docker pull mysql
    基于docker搭建MySql主从数据库(详细步骤)_第4张图片

  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

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

基于docker搭建MySql主从数据库(详细步骤)_第5张图片

  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密码
    基于docker搭建MySql主从数据库(详细步骤)_第6张图片
    退出 mysql 客户端的指令:quit
    退出容器的指令:exit
    基于docker搭建MySql主从数据库(详细步骤)_第7张图片

  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搭建MySql主从数据库(详细步骤)_第8张图片
    第二步:输入对应信息,点击测试连接。弹出连接成功后即可!
    基于docker搭建MySql主从数据库(详细步骤)_第9张图片
    注意这里的主机为运行 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 中,新建查询。
    基于docker搭建MySql主从数据库(详细步骤)_第10张图片
    第二步:输入以下mysql语句,并运行。
-- 创建用户 slave --
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password by '123';

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

-- 应用权限 --
FLUSH PRIVILEGES;

基于docker搭建MySql主从数据库(详细步骤)_第11张图片

  1. 查询 master 状态
    在查询中输入show master status
    基于docker搭建MySql主从数据库(详细步骤)_第12张图片

  2. 获取 master IP地址
    输入指令:docker inspect mysql_3306 |grep IPA
    基于docker搭建MySql主从数据库(详细步骤)_第13张图片

三、搭建 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

这里要注意从数据库的路径与名称都需要进行修改!
以下是代码运行后的界面,出现一串无序字符代表创建成功。
基于docker搭建MySql主从数据库(详细步骤)_第14张图片

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

  2. Navicat 测试连接
    这一步操作也与之前相同,这里也不再过多赘述,直接上图。
    基于docker搭建MySql主从数据库(详细步骤)_第15张图片

  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 地址。
基于docker搭建MySql主从数据库(详细步骤)_第16张图片

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

  2. 查询 slave 状态
    show slave status \G;
    基于docker搭建MySql主从数据库(详细步骤)_第17张图片

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

你可能感兴趣的:(数据库,docker,mysql)