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

这篇具有很好参考价值的文章主要介绍了基于docker搭建MySql主从数据库(详细步骤)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

操作步骤

一、准备工作

  1. 在 Linux 中建立对应文件夹,用于存放MySql数据库相关,文件夹路径:/usr/local/software/mysql
  2. 在mysql文件下创建如下目录结构的文件:(3306为主数据库文件夹,笔者这里以对端口号来命名;3310为从数据库文件夹,3311同理,可依次往下)
    docker 构建mysql,数据库,docker,mysql
  3. 上传 my.cnf 文件到 conf 文件夹下
    docker 构建mysql,数据库,docker,mysql
    以下是 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,数据库,docker,mysql

  2. 查询 mysql 镜像
    对应的docker指令: docker search mysql
    docker 构建mysql,数据库,docker,mysql

  3. 拉取 mysql 镜像到本地
    对应的docker指令:docker pull mysql
    docker 构建mysql,数据库,docker,mysql

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

docker 构建mysql,数据库,docker,mysql

  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,数据库,docker,mysql

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

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

成功进入容器后,前缀会变化,如图所示:
docker 构建mysql,数据库,docker,mysql

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

  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,数据库,docker,mysql
    第二步:输入对应信息,点击测试连接。弹出连接成功后即可!
    docker 构建mysql,数据库,docker,mysql
    注意这里的主机为运行 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,数据库,docker,mysql
    第二步:输入以下mysql语句,并运行。
-- 创建用户 slave --
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password by '123';

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

-- 应用权限 --
FLUSH PRIVILEGES;

docker 构建mysql,数据库,docker,mysql

  1. 查询 master 状态
    在查询中输入show master status
    docker 构建mysql,数据库,docker,mysql

  2. 获取 master IP地址
    输入指令:docker inspect mysql_3306 |grep IPA
    docker 构建mysql,数据库,docker,mysql

三、搭建 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,数据库,docker,mysql

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

  2. Navicat 测试连接
    这一步操作也与之前相同,这里也不再过多赘述,直接上图。
    docker 构建mysql,数据库,docker,mysql

  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,数据库,docker,mysql

  1. 开启从数据库(slave)
    start slave;
    docker 构建mysql,数据库,docker,mysql

  2. 查询 slave 状态
    show slave status \G;
    docker 构建mysql,数据库,docker,mysql

  3. 功能测试
    在主数据库中建表,查看从数据库中是否会自动生成相同的表 。文章来源地址https://www.toymoban.com/news/detail-708148.html

到了这里,关于基于docker搭建MySql主从数据库(详细步骤)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mysql数据库--实现主从复制搭建与同步

    一般数据库都是读取压力大于写数据压力,主从复制即为了实现数据库的负载均衡和读写分离。通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,主服务器只负责写,而从服务器只负责读。 如生产环境中,使用redis数据库作为缓存数据库,用户访问业务数据时,先

    2024年02月08日
    浏览(40)
  • Mysql数据库搭建互为主从mysqlB的配置文件

    [client] port=3306 socket=/var/lib/mysql/mysql.sock [mysqld] port=3306 socket=/var/lib/mysql/mysql.sock datadir=/var/lib/mysql pid-file=/var/lib/mysql/mysql.pid log-error=/var/log/mysql.err server-id=2 #偶数ID auto_increment_offset=2 auto_increment_increment=2 #打开二进制功能,MASTER主服务器必须打开此项 log-bin=mysql-bin binlog-format=MIXED

    2024年02月15日
    浏览(37)
  • MySQL8.0+数据库GTID主从模式搭建

    参见: MySQL数据库8.0+版本部署安装-CSDN博客 部署环境[例]: 主库:192.168.179.153:3306 从库:192.168.179.154:3306 主从库开启GTID模式 // 主从库均修改,修改从库配置文件,在[mysqld]下添加如下配置 $ vim /etc/my.cnf gtid_mode = on enforce_gtid_consistency = on 需检查server-id配置,为主从架构中的所有

    2024年02月04日
    浏览(51)
  • 第90讲:MySQL数据库主从复制集群原理概念以及搭建流程

    1.1.什么是主从复制集群 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主

    2024年01月20日
    浏览(43)
  • 使用Docker构建的MySQL主从架构:高可用性数据库解决方案

    MySQL主从架构,我们已经在vmware虚拟机上实践过了,接下来我们一起探讨在docker中如何使用MySQL主从架构。 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家😉😉 💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺

    2024年02月08日
    浏览(77)
  • MySQL数据库——主从复制

    在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似

    2024年02月11日
    浏览(81)
  • 基于docker容器部署MySQL数据库

    一,概要.... 2 二,环境准备.... 3 2.1,docker部署.... 3 三,使用docker部署mysql 6 3.1、创建数据存放目录.... 6 3.2、创建bridge网络并指定IP区间.... 6 3.3、Docker安装MySQL. 6 3.4、自定义配置.... 7 四,MySQL简单的配置.... 9 4.1、在容器 mysql 中开启一个交互模式的终端.... 9 4.2、mysql登录....

    2024年02月04日
    浏览(57)
  • MySQL数据库实现主从同步

    安装MySQL数据库8.0.32 今天来学习数据库主从同步的原理及过程,数据库主要是用来存储WEB数据,在企业当中是极为重要的,下面一起来看下。 MySQL主从复制在中小企业,大型企业中广泛使用,MySQL主从复制的目的是实现数据库冗余备份,将master数据库数据定时同步到slave数据库

    2024年02月02日
    浏览(36)
  • Mysql主从搭建 基于DOCKER

    主节点配置文件 从节点配置文件 部署主节点 部署从节点 主节点执行 主节点执行命令 该命令会返回以下信息: 名称 说明 File 当前正在写入的二进制日志文件名 Position 当前正在写入的二进制日志文件的位置 Binlog_Do_DB 指定需要写入二进制日志的数据库名 Binlog_Ignore_DB 指定不

    2024年02月14日
    浏览(27)
  • docker版postgresql数据库主从配置

    参考:postgresql16配置主从 注意项 :当前操作主路径: ~/dockerEnv 【示例路径】 创建 sql 文件,文件路径 dockerEnv/dbInit/a_create_user.sql 注意: 如果在同一个宿主机操作,注意多个 yml 文件的端口映射,不要冲突! 挂载宿主机 sql 文件夹到容器的 docker-entrypoint-initdb.d 路径下,容器启

    2024年04月14日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包