热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

dockerhubmysql主从_详解用Docker构建MySQL主从环境

前言本篇文章记录我使用docker-compose以及dockerfile来构建基于binlog的MySQL主从环境。如果你严格按照文中的步骤进行配置,相信很快就可以

前言

本篇文章记录我使用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境。如果你严格按照文中的步骤进行配置,相信很快就可以搭建好一个基础的 MySQL 主从环境。

介绍

ec9bc04de61c1ea4a7bbb9125eefe79a.png

MySQL 主从同步分为 3 个步骤:

master 节点将数据的更新记录写到 binary log 中。

slave 节点开启 IO 线程连接 master 节点,请求获取指定 binary log 文件的指定位置之后的日志。

master 节点的 binary log dump 线程将指定的 binary log 信息推送给 slave 节点。

slave 节点的 IO 线程接收到消息后,将日志内容写入 relay log 文件。

slave 节点的 SQL 线程检测到 relay log 新增了内容,马上解析 relay log 文件生成相应的 SQL 语句,并将这些 SQL 语句重放到数据库,保证主从数据一致性。

配置

创建目录结构

首先先搞定目录结构,我的目录结构如下,如果想按照自己的想法来组建目录,在下文中的 docker-compose.yaml 文件与 Dockerfile 文件要注意修改文件路径。

b472807a314901ce24ec49d20eae1f0a.png

配置 docker-compose 模版文件

version: "3"

services:

mysql-master:

build:

context: ./

dockerfile: mysql/master/Dockerfile

container_name: mysql-master

volumes:

- ./mysql/master/data:/var/lib/mysql

restart: always

ports:

- 3305:3306

links:

- mysql-slave

mysql-slave:

build:

context: ./

dockerfile: mysql/slave/Dockerfile

container_name: mysql-slave

volumes:

- ./mysql/slave/data:/var/lib/mysql

restart: always

ports:

- 3306:3306

配置 master 节点的 cluster.cnf 文件以及 Dockerfile 文件

[mysqld]

server_id=100

binlog-ignore-db=mysql

log-bin=replicas-mysql-bin

binlog_cache_size=1M

binlog_format=mixed

slave_skip_errors=1062

# 我的 MySQL 为 8.x,需要如下配置

default_authentication_plugin=mysql_native_password

character-set-server=utf8mb4

collation-server=utf8mb4_unicode_ci

FROM mysql:latest

ADD ./mysql/master/cluster.cnf /etc/mysql/conf.d/cluster.cnf

ENV MYSQL_ROOT_PASSWORD=password

配置 slave 节点的 cluster.cnf 文件以及 Dockerfile 文件

[mysqld]

server_id=101

binlog-ignore-db=mysql

binlog_cache_size=1M

binlog_format=mixed

slave_skip_errors=1062

relay_log=replicas-mysql-relay-bin

log_slave_updates=1

read_only=1

# 我的 MySQL 为 8.x,需要如下配置

default_authentication_plugin=mysql_native_password

character-set-server=utf8mb4

collation-server=utf8mb4_unicode_ci

FROM mysql:latest

ADD ./mysql/slave/cluster.cnf /etc/mysql/conf.d/cluster.cnf

ENV MYSQL_ROOT_PASSWORD=password

创建容器

docker-compose up -d mysql-master mysql-slave

运行上述命令进行容器创建,如果构建时间过长,可以考虑更换镜像源,例如下面几个国内优质镜像源:

网易: http://hub-mirror.c.163.com

阿里云&#xff1a; http://< ;你的ID>.mirror.aliyuncs.com

中国科学技术大学&#xff1a; http://docker.mirrors.ustc.ed...

构建完成之后&#xff0c;使用 docker ps 命令查看一下容器是否正常运行&#xff0c;出现如下情形则可以认为已经构建成功。

bbaa2d517ac34d438b214a6506c5a9dd.png

配置 slave 节点

87635c408a93bca00c1d5c499e0e757c.png

首先使用 docker 命令进入到 mysql-master 容器中&#xff0c;再登录到 mysql 输入 show master status 命令获取主库状态&#xff0c;这里我们要关心两个参数 File 以及 Position &#xff0c;之后配置从库会用到这两个参数。

d524a0edb0909a1b336eafe25eeb7d16.png

接下来使用 docker 命令进入 mysql-slave 容器&#xff0c;再登录到 mysql 输入以下语句进行与 mysql-master 连接。

CHANGE MASTER TO

MASTER_HOST&#61;&#39;mysql-master&#39;,

MASTER_USER&#61;&#39;root&#39;,

MASTER_PASSWORD&#61;你设置的密码,

MASTER_LOG_FILE&#61;上一步得到的 File 参数,

MASTER_LOG_POS&#61;上一步得到的 Position 参数;

输入完成后再键入 start slave 命令启动 slave 服务。启动之后输入 show slave status \G 命令查看 slave 节点状态&#xff0c;出现如下情形可认为配置成功。

97d555e8c870db011ea730ee41e9f35d.png

测试主从节点同步状态

0521ea4c94c01f5db7d83e8a1c433dbd.png

登录到 mysql-master 节点&#xff0c;创建一个全新的库&#xff0c;创建成功之后&#xff0c;切换到 mysql-slave 节点&#xff0c;输入 show databases; 命令&#xff0c;查看是否成功同步&#xff0c;出现如下情形则配置成功。其他操作可以自己尝试&#xff0c;这里不再做演示。

d88d939a1deb99358529c9e85f48f702.png

总结

这是我自己尝试搭建 MySQL 主从架构所记录的步骤&#xff0c;到此这篇关于详解用Docker构建MySQL主从环境的文章就介绍到这了,更多相关Docker构建MySQL主从内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家&#xff01;



推荐阅读
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • MongoDB的核心特性与架构解析
    本文深入探讨了MongoDB的核心特性,包括其强大的查询语言、灵活的文档模型以及高效的索引机制。此外,还详细介绍了MongoDB的体系结构,解释了其文档、集合和数据库的层次关系,并对比了MongoDB与传统关系型数据库(如MySQL)的逻辑结构。 ... [详细]
  • 在尝试从数据库获取设置的过程中,遇到了一个致命错误:Fatal error: Call to a member function bind_param() on boolean。本文将详细分析该错误的原因,并提供解决方案。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • MySQL Debug 模式的实现与应用
    本文详细介绍了如何启用和使用 MySQL 的调试模式,包括编译选项、环境变量配置以及调试信息的解析。通过实际案例展示了如何利用调试模式解决客户端无法连接服务器的问题。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 本文详细介绍了在XAMPP环境中如何修改Apache和MySQL的默认端口号,并确保WordPress能够正常访问。同时,提供了针对Go语言社区和Golang开发者的相关建议。 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
  • 开发笔记:由数据库某字段存数组引发的json_encode/serialize思考
    开发笔记:由数据库某字段存数组引发的json_encode/serialize思考 ... [详细]
  • Linux环境下MySQL查询结果导出及ERROR 1290 (HY000) 解决方案
    本文详细解析了在Linux系统中使用MySQL导出查询结果时遇到的ERROR 1290 (HY000)错误,并提供了有效的解决策略。通过调整配置文件或更改导出路径,可以轻松解决这一常见问题。 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
author-avatar
kevin2502896577
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有