我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用Docker自动化部署MySQL集群

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用Docker自动化部署MySQL集群

1. 编写master.sh脚本

此脚本主要是根据环境变量,创建出用于主从同步的用户。关于为什么要创建出master,slave脚本,是为了区分master和slave环境,因为只要把sql和sh文件放到master目录下面,master在第一次初始化的时候,会自动执行里面的文件内容

mkdir -p init init/master init/slave
cat > init/master/master.sh <

2. 编写slave.sh脚本

slave主要是去master查询最新的pos位置和binlog文件名称,然后创建同步需要的相关信息,然后执行start slave;

cat >init/slave/slave.sh<

3. 编写docker-compose.yml脚本

version: '3'
services:
  master:
    image: mysql:8
    container_name: mysql-master
    ports:
    - '3306:3306'
    restart: always
    hostname: mysql-master
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      MASTER_SYNC_USER: "sync"
      MASTER_SYNC_PASSWORD: "123456"
      ADMIN_USER: "root"
      ADMIN_PASSWORD: "123456"
      TZ: "Asia/Shanghai"
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: 50m
    healthcheck:
      test: ["CMD","mysqladmin","-uroot","-p$${MYSQL_ROOT_PASSWORD}","ping","-h","localhost"]
      timeout: 2s
      interval: 10s
      retries: 5
      start_period: 5s
    logging:
      options:
        max-file: '1'
        max-size: '128k'
    command:
    -  "--server-id=1"
    -  "--character-set-server=utf8mb4"
    -  "--collation-server=utf8mb4_unicode_ci"
    -  "--log-bin=mysql-bin"
    -  "--sync_binlog=1"
    -  "--binlog-ignore-db=mysql"
    -  "--binlog-ignore-db=sys"
    -  "--binlog-ignore-db=performance_schema"
    -  "--binlog-ignore-db=information_schema"
    -  "--sql_mode=NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES"
    volumes:
    - ./init/master:/docker-entrypoint-initdb.d
    - ./data/master:/var/lib/mysql
  slave:
    image: mysql:8
    container_name: mysql-slave
    ports:
    - '3307:3306'
    restart: always
    hostname: mysql-slave
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      SLAVE_SYNC_USER: "sync"
      SLAVE_SYNC_PASSWORD: "123456"
      ADMIN_USER: "root"
      ADMIN_PASSWORD: "123456"
      MASTER_HOST: "mysql-master"
      TZ: "Asia/Shanghai"
    healthcheck: 
      test: ["CMD","mysqladmin","-uroot","-p$${MYSQL_ROOT_PASSWORD}","ping","-h","localhost"]
      timeout: 2s
      interval: 10s
      retries: 5
      start_period: 5s
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: 50m
    logging:
      options:
        max-file: '1'
        max-size: '128k'
    depends_on:
      master:
        condition: service_healthy
    command:
    -  "--server-id=2"
    -  "--character-set-server=utf8mb4"
    -  "--collation-server=utf8mb4_unicode_ci"
    -  "--sql_mode=NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES"
    volumes:
    - ./init/slave:/docker-entrypoint-initdb.d
    - ./data/slave:/var/lib/mysql

启动脚本

docker-compose up -d

后期维护过程中可能用到的脚本

STOP SLAVE;
RESET SLAVE;
CHANGE MASTER TO master_log_pos=0;
START SLAVE;
SHOW SLAVE STATUS;

写在后面,基于docker-compose搭建mysql主从已经结束,这里主要演示了如何一键搭建mysql主从,同时测试在各种环境下,还能保证主从同步。但是单主从同步肯定也无法满足企业的需求,有兴趣的同学可以研究一些主主双写同步,然后通过nginx搭建主备模式,达到高可用。

这里提供一个判断的方法,编写#boot.sh脚本文件,这时候需要重写dockerfile文件,使用myslq debian的镜像文件。并通过apt添加netcat工具。具体不再详述了,以下为判断脚本。

#!/bin/bash
wait_for() {
    echo Waiting for $1 to listen on $2...
    sleep 1
    while ! nc -vz $1 $2
    do
       echo waiting...;
       sleep 1s;
    done
}
if [ -e "/slave" ]; then
   echo "slave..."
   cp /slave.cnf /etc/mysql/conf.d/
else
   echo "master..."
   cp /master.cnf /etc/mysql/conf.d/
fi


echo "master config ... "
/master.sh
echo "complete. "
if [ -n "$MASTER_HOST" ]; then
   echo "replicaof $MASTER_HOST"
   wait_for $MASTER_HOST $MASTER_PORT
   /slave.sh
        echo "Slave config complete."
fi

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用Docker自动化部署MySQL集群

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用Docker自动化部署MySQL集群

本文主要是简化mysql主从搭建,同时给需要学习mysql主从的同学一个现成的环境。
MySQLDocker2024-11-29

Docker快速部署MySQL集群

Bitnami是一个流行的服务器应用程序和开发环境库,这个组织负责编译和配置应用程序及其所有依赖项(第三方库,语言运行时,数据库),它们可以开箱即用。

docker中如何部署mysql集群

在Docker中部署MySQL集群可以使用Docker Compose来管理多个MySQL容器,并使用MySQL Router来实现负载均衡和故障转移。以下是一个简单的示例:创建一个名为docker-compose.yml的文件,并在其中定
docker中如何部署mysql集群
2024-04-09

Ubuntu Spark集群的自动化部署流程

Ubuntu Spark集群的自动化部署可以通过多种方式实现,以下是其中一种基于Ansible的自动化部署流程示例:准备环境:确保所有节点(包括主节点和计算节点)都已安装好Ubuntu系统和必要的软件包,如OpenSSH、wget等。编写
Ubuntu Spark集群的自动化部署流程
2024-10-22

redis怎么用docker部署集群

要使用Docker部署Redis集群,您可以按照以下步骤进行操作:1. 首先,您需要确保已经安装了Docker和Docker Compose。2. 创建一个名为`docker-compose.yml`的文件,并在其中定义Redis集群的配置
2023-08-30

CapitalOne - Artifactory高可用集群的自动化部署实践

背景:本文为大家介绍Capital One如何利用自动化流水线实现Artifactory HA集群进行自动化运维。Capital One银行是美国最大的数字化银行之一,在Capital One的devops体系中应用了JFrog Artif
2023-06-04

使用 Docker 和 DbVisualizer 简化 MySQL 部署

本指南演示了如何使用 docker 容器化 mysql 数据库并使用 dbvisualizer 对其进行管理,以实现跨各种环境的无缝部署。从编写 dockerfile 开始。from mysql:latestenv mysql_root_
使用 Docker 和 DbVisualizer 简化 MySQL 部署
2024-07-16

容器化 | 在 KubeSphere 中部署 MySQL 集群

程润科数据库研发工程师,目前从事 RadonDB MySQL Kubernetes 研发,热衷于研究数据库内核、K8s 相关技术。张莉梅高级文档工程师,目前负责数据库产品文档开发、维护和管理工作。本文将演示如何在 KubeSphere[1] 上部署 Rado
容器化 | 在 KubeSphere 中部署 MySQL 集群
2015-06-24

docker自动化部署怎么实现

要实现Docker的自动化部署,可以采用以下步骤:1. 编写Dockerfile:根据项目需求编写Dockerfile文件,定义Docker镜像的构建流程、依赖关系和环境配置等。2. 使用CI/CD工具:选择一个适合的CI/CD工具(如Je
2023-08-12

如何使Docker自动部署Apache Tomcat

这篇文章主要介绍如何使Docker自动部署Apache Tomcat,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!介绍本文会讲述:扩展Tomcat的官方Dockerfile构建新的镜像从修改过的新镜像启动容器在容器里
2023-06-07

使用GitHub Actions自动化部署FTP

传统的 Web 开发人员常常喜欢通过 FTP 服务器直接编辑文件,而不是使用版本控制系统,主要原因是因为部署方便。利用 GitHub actions 可以非常简单地实现自动化部署。本文为大家展示一个基本的 PHP 示例。
WebFTP服务器2024-11-30

kubernetes中部署mysql集群并持久化存储

在Kubernetes中部署MySQL集群并持久化存储,可以使用StatefulSet和PersistentVolumeClaim(PVC)来实现。1. 创建一个存储类(StorageClass),用于定义持久化存储的类型和属性。例如,可以
2023-09-14

热门标签

编程热搜

编程资源站

目录