当前位置: 首页 > article >正文

MySQL+Redis实战教程:从Docker安装部署到自动化备份与数据恢复20250418

MySQL+Redis实战教程:从Docker安装部署到自动化备份与数据恢复


一、前言

在企业应用中,对MySQL和Redis运维的要求越来越高:

  • 不能仅是启动就算部署
  • 运行稳定、隔离、访问控制、备份恢复、安全可靠,才是 企业级的基本功能

本文将手把手教你打造一套 可备份、可恢复、可产用的MySQL+Redis基础设备 ,基于Docker实现全路径开发。

在这里插入图片描述


二、项目目录结构

我们完整的Docker部署目录结构如下:

/opt/docker/
├── mysql_redis_deploy/           # 实际部署代码目录
│   ├── .env                      # 环境变量
│   ├── docker-compose.yml        # docker组合启动文件
│   ├── service_*.sh              # 系列启动、停止、重启、状态脚本
│   ├── backup_mysql.sh           # MySQL备份脚本 (多数据库、自动清理)
│   ├── redis_backup.sh           # Redis备份脚本 (选用)
│   ├── health_check.sh           # 异常自动重启
│   ├── readme.md                 # 项目内部文档
├── backups/                      # 数据备份文件夹
│   ├── mysql/                    # MySQL备份 .sql.gz
│   ├── redis/                    # Redis备份
├── config/
│   ├── mysql/                    # MySQL配置文件 + data挂载目录
│   ├── redis/                    # Redis配置文件 + data
├── iso/
│   ├── mysql_8.0.tar              # 离线Docker镜像
│   ├── redis_7.2-alpine.tar      # 离线Docker镜像

三、关键文件详解

1. .env

# MySQL配置
MYSQL_ROOT_PASSWORD=StrongRootPwd123!
MYSQL_DATABASE=yufudb
MYSQL_USER=mysqluser
MYSQL_PASSWORD=StrongUserPwd123!# Redis配置
REDIS_PASSWORD=StrongRedisPwd123!

2. docker-compose.yml

采用环境变量模式配置,且配置了healthcheck:

services:mysql:image: mysql:8.0container_name: mysql_containerenvironment:MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}MYSQL_DATABASE: ${MYSQL_DATABASE}MYSQL_USER: ${MYSQL_USER}MYSQL_PASSWORD: ${MYSQL_PASSWORD}MYSQL_INITDB_ARGS: "--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"ports:- "3306:3306"volumes:- /opt/docker/config/mysql/data:/var/lib/mysql- /opt/docker/config/mysql/conf:/etc/mysql/conf.dhealthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-p${MYSQL_ROOT_PASSWORD}"]interval: 20sretries: 3start_period: 30stimeout: 10sredis:image: redis:7.2-alpinecontainer_name: redis_containercommand: ["redis-server", "/etc/redis/redis.conf", "--requirepass", "${REDIS_PASSWORD}"]ports:- "6379:6379"volumes:- redis_data:/data- /opt/docker/backups/redis:/backups/redis- /opt/docker/config/redis/redis.conf:/etc/redis/redis.confhealthcheck:test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]interval: 30sretries: 3start_period: 10stimeout: 5s

四、MySQL数据库备份脚本 (multi-db + 自动清理 + 日志)

#!/bin/bash
BACKUP_DIR="/opt/docker/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
CONTAINER_NAME="mysql_container"
MYSQL_USER="root"
MYSQL_PASSWORD="StrongRootPwd123!"
KEEP_DAYS=30
DATABASES=("yufudb" "testdb" "analyticsdb")
LOG_FILE="${BACKUP_DIR}/backup_${DATE}.log"mkdir -p "$BACKUP_DIR"
echo "[${DATE}] Start backup..." | tee -a "$LOG_FILE"for DB in "${DATABASES[@]}"; dodocker exec $CONTAINER_NAME /usr/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $DB > "$BACKUP_DIR/${DB}_$DATE.sql"gzip "$BACKUP_DIR/${DB}_$DATE.sql"echo "[$DB] Done: ${DB}_$DATE.sql.gz" | tee -a "$LOG_FILE"
donefind "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +$KEEP_DAYS -exec rm {} \;
echo "[$DATE] Cleaned expired backups." | tee -a "$LOG_FILE"

配合crontab

0 2 * * * bash /opt/docker/mysql_redis_deploy/backup_mysql.sh >> /opt/docker/backups/mysql/backup_$(date +\%Y\%m\%d).log 2>&1

五、MySQL数据恢复一行命令

gunzip /opt/docker/backups/mysql/yufudb_20240418_020000.sql.gz
docker exec -i mysql_container mysql -uroot -p'StrongRootPwd123!' yufudb < /opt/docker/backups/mysql/yufudb_20240418_020000.sql

建议恢复前确保目标数据库为空


六、遗忘密码处理方案

docker run --name mysql_reset_tmp \-v /opt/docker/config/mysql/data:/var/lib/mysql \-v /opt/docker/config/mysql/conf:/etc/mysql/conf.d \-p 3307:3306 \-e MYSQL_ALLOW_EMPTY_PASSWORD=yes \-d mysql:8.0 --skip-grant-tablesdocker exec -it mysql_reset_tmp bash
mysql -uroot

进入MySQL后:

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongRootPwd123!';
ALTER USER 'root'@'%' IDENTIFIED BY 'StrongRootPwd123!';
ALTER USER 'mysqluser'@'%' IDENTIFIED BY 'StrongUserPwd123!';
FLUSH PRIVILEGES;

退出,删除并重启正常安全式MySQL容器


七、健康状态自动检查 + 重启

#!/bin/bash
check_container_health() {container_name=$1health_status=$(docker inspect --format='{{.State.Health.Status}}' ${container_name} 2>/dev/null)if [ "$health_status" != "healthy" ]; thenecho "[$(date +"%F %T")] $container_name unhealthy! Restarting..."docker restart $container_nameelseecho "[$(date +"%F %T")] $container_name healthy."fi
}check_container_health mysql_container
check_container_health redis_container

配合crontab每小时检查一次

0 * * * * bash /opt/docker/mysql_redis_deploy/health_check.sh >> /opt/docker/logs/health_check.log 2>&1

八、总结与实践

该项目展示了如何从零构建一套符合企业级要求的可备份、可恢复、可稳定运行的MySQL+Redis服务体系,覆盖了部署、备份、恢复、密码管理与健康维护的完整链路。

持续完善,可扩展:如一键数据库恢复脚本、灾备切换脚本等。


相关文章:

MySQL+Redis实战教程:从Docker安装部署到自动化备份与数据恢复20250418

MySQLRedis实战教程&#xff1a;从Docker安装部署到自动化备份与数据恢复 一、前言 在企业应用中&#xff0c;对MySQL和Redis运维的要求越来越高&#xff1a; 不能仅是启动就算部署运行稳定、隔离、访问控制、备份恢复、安全可靠&#xff0c;才是 企业级的基本功能 本文将手…...

AI驱动商业变革:零售行业的智能化跃迁

引言&#xff1a;AI技术迈入黄金时代 2024年成为生成式AI&#xff08;Gen AI&#xff09;全面落地的关键年。据麦肯锡《技术趋势展望》报告&#xff0c;生成式AI相关投资同比增长​7倍​​&#xff0c;其经济价值预计达​​2.6-4.4万亿美元​​[1]。在零售领域&#xff0c;该技…...

linux kernel irq相关函数详解

在Linux内核驱动开发中&#xff0c;处理中断涉及一系列关键函数&#xff0c;正确使用这些函数对确保驱动的稳定性和性能至关重要。以下是disable_irq、free_irq、platform_get_irq和request_irq等函数的详细解析&#xff0c;涵盖其功能、用法、注意事项及示例代码。 一、核心函…...

AI调试工具有哪些?

一、深度学习框架专用调试工具 TensorBoard • 功能&#xff1a;实时监控训练指标&#xff08;损失值、准确率&#xff09;、可视化神经网络结构、分析参数分布和梯度信息 • 适用框架&#xff1a;TensorFlow、PyTorch&#xff08;通过插件&#xff09; • 特点&#xff1a;支持…...

嵌入式设备网络的动态ID分配机制实现

文章目录 前言一、系统设计要点二、核心数据结构2.1 设备唯一标识(DeviceUID)2.2 节点信息(Node)2.3 节点管理器(NodeManager) 三、核心算法实现3.1 初始化与清理3.1.1 初始化节点管理器3.1.2 清理节点管理器 3.2 动态ID分配策略3.2.1 查找最小可用ID3.2.2 ID使用检查 3.3 心跳…...

交易模式革新:Eagle Trader APP上线,助力自营交易考试效率提升

近年来&#xff0c;金融行业随着投资者需求的日益多样化&#xff0c;衍生出了众多不同的交易方式。例如&#xff0c;为了帮助新手小白建立交易基础&#xff0c;诞生了各类跟单社区&#xff1b;而与此同时&#xff0c;一种备受瞩目的交易方式 —— 自营交易模式&#xff0c;正吸…...

健身会员管理系统(ssh+jsp+mysql8.x)含运行文档

健身会员管理系统(sshjspmysql8.x) 对健身房的健身器材、会员、教练、办卡、会员健身情况进行管理&#xff0c;可根据会员号或器材进行搜索&#xff0c;查看会员健身情况或器材使用情况。...

http、https、TLS、证书原理理解,对称加密到非对称加密问题,以及对应的大致流程

http 超文本传输协议 存在问题&#xff1a; 安全性、隐私性、数据完整性 易被中间人&#xff08;黑客之类的&#xff09;对数据进行劫持、篡改、隐私泄露 引出了 https &#xff08;source&#xff09; http 在网络模型中的应用层 Application > transport > inter…...

捋一遍Leetcode【hot100】的二叉树专题

二叉树专题 除了后面两个&#xff0c;都挺简单 二叉树的中序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int …...

[安全实战]Python程序打包为EXE的安全加固全攻略(加密+混淆+签名)

Python程序打包为EXE的安全加固全攻略 (加密+混淆+签名:三位一体的Python程序保护体系) 摘要 本文深度解析Python程序打包为EXE的全流程安全防护方案,涵盖加密算法选择、代码混淆技术、反逆向工程等核心安全策略。通过典型攻击防护方案、商业级加固方案对比,打造企业级…...

【测试文档】项目测试文档,测试管理规程,测试计划,测试文档模版,软件测试报告书(Word)

原件获取列表&#xff1a; 系统测试方案-2.docx B-Web安全服务渗透测试模板.docx 压力测试报告.docx安全测试用例及解析.docx 测试计划.doc 测试需求规范.doc 测试需求指南.docx 测试用例设计白皮.doc 单元测试报告模板.doc 单元测试计划模板.doc 回归测试指南.doc 集成测试报…...

Linux的联网网络管理攻略

RHEL9版本特点 在RHEL7版本中&#xff0c;同时支持network.service和NetworkManager.service&#xff08;简称NM&#xff09;。 在RHEL8上默认只能通过NM进行网络配置&#xff0c;包括动态ip和静态ip,若不开启NM&#xff0c;否则无法使用网络RHEL8依然支持network.service&am…...

Zookeeper三台服务器三节点集群部署(docker-compose方式)

1. 准备工作 - 服务器:3 台服务器,IP 地址分别为 `10.10.10.11`、`10.10.10.12`、`10.10.10.13`。 - 安装 Docker:确保每台服务器已安装 Docker 和 Docker Compose。 - 网络通信:确保三台服务器之间可以通过 IP 地址互相访问,并开放以下端口: - `2181`:Zookeeper 客户…...

ISO26262-浅谈用例导出方法和测试方法

目录 1 摘要2 测试方法3 测试用例导出方法4 测试方法与用例导出方法的差异和联系5 结论 1 摘要 ISO26262定义了测试方法和用例导出方法&#xff0c;共同保证产品的开发质量。但在刚开始学习ISO26262的时候&#xff0c;又不是非常清晰地理解它俩的区别和联系。本文主要对它俩的…...

Linux上位机开发实践(SoC和MCU的差异)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 soc一般是指跑linux的芯片&#xff0c;而mcu默认是跑rtos的芯片&#xff0c;两者在基本原理方面其实差异不大。只不过&#xff0c;前者由于性能的原…...

【基于Fluent+Python耦合的热管理数字孪生系统开发:新能源产品开发的硬核技术实践】

引言&#xff1a;热管理数字孪生的技术革命 在新能源领域&#xff08;如动力电池、储能系统、光伏逆变器等&#xff09;&#xff0c;热管理是决定产品性能与安全的核心问题。传统热设计依赖实验与仿真割裂的流程&#xff0c;而数字孪生技术通过实时数据驱动与动态建模&#xf…...

ios app的ipa文件提交最简单的方法

ipa文件是ios的app打包后生成的二级制文件&#xff0c;在上架app store connect或做testflight测试的时候&#xff0c;它提示我们需要使用xcode、transporter或xcode命令行等方式来上传。 而xcode、transporter或xcode命令行的安装都需要使用mac电脑&#xff0c;假如没有mac电…...

详细解释浏览器是如何渲染页面的?

渲染流程概述 渲染的目标&#xff1a;将HTML文本转化为可以看到的像素点 当浏览器的网络线程收到 HTML 文档后&#xff0c;会产生一个渲染任务&#xff0c;并将其传递给渲染主线程的消息队列。在事件循环机制的作用下&#xff0c;渲染主线程取出消息队列中的渲染任务&#xff0…...

swift-12-Error处理、关联类型、assert、泛型_

一、错误类型 开发过程常见的错误 语法错误&#xff08;编译报错&#xff09; 逻辑错误 运行时错误&#xff08;可能会导致闪退&#xff0c;一般也叫做异常&#xff09; 2.1 通过结构体 第一步 struct MyError : Errort { var msg: String &#xff5d; 第二步 func divide(_ …...

如何查看HTTP状态码?

目录 一、HTTP状态码查看方法 1. ​​浏览器开发者工具​​ 2. ​​命令行工具​​ 3. ​​服务器日志分析​​ 二、HTTP状态码分类与核心含义 1. ​​信息类&#xff08;1xx&#xff09;​​ 2. ​​成功类&#xff08;2xx&#xff09;​​ 3. ​​重定向类&#xff08…...

下采样(Downsampling)

目录 1. 下采样的定义与作用​​ ​​2. 常见下采样方法​​ ​​(1) 池化&#xff08;Pooling&#xff09;​​ ​​(2) 跨步卷积&#xff08;Strided Convolution&#xff09;​​ ​​(3) 空间金字塔池化&#xff08;SPP&#xff09;​​ ​​3. PyTorch 实现示例​​ …...

PostgreSQL 常用客户端工具

PostgreSQL 常用客户端工具 PostgreSQL 拥有丰富的客户端工具生态系统&#xff0c;以下是各类常用工具的详细分类和介绍&#xff1a; 一 图形化客户端工具 1.1 跨平台工具 工具名称特点适用场景许可证pgAdmin官方出品&#xff0c;功能全面开发/运维PostgreSQLDBeaver支持多…...

Nacos安装及数据持久化

1.Nacos安装及数据持久化 1.1下载nacos 下载地址&#xff1a;https://nacos.io/download/nacos-server/ 不用安装&#xff0c;直接解压缩即可。 1.2配置文件增加jdk环境和修改单机启动standalone 找到bin目录下的startup.cmd文件&#xff0c;添加以下语句(jdk路径根据自己…...

ES关系映射(数据库中的表结构)

ES常见数据类型及用途 1. 基础类型 ES类型对应MySQL类型特点示例场景textVARCHAR/TEXT全文分词搜索&#xff0c;默认用标准分词器商品描述、日志内容keywordCHAR/VARCHAR精确匹配&#xff0c;不分词订单号、标签、枚举值&#xff08;如状态码&#xff09;longBIGINT64位整数ID、…...

FPGA_YOLO(四)用HLS实现循环展开以及存储模块

Vivado HLS&#xff08;High-Level Synthesis&#xff0c;高层次综合&#xff09;是赛灵思&#xff08;Xilinx&#xff09;在其 Vivado 设计套件 中提供的一款工具&#xff0c;用于将 高级编程语言&#xff08;如 C、C、SystemC&#xff09; 直接转换为 硬件描述语言&#xff0…...

ASP.NET MVC 实现增删改查(CRUD)操作的完整示例

提供一个完整的 ASP.NET MVC 实现增删改查&#xff08;CRUD&#xff09;操作的示例。该示例使用 SQL Server 数据库&#xff0c;以一个简单的 Product 实体为例。 步骤 1&#xff1a;创建 ASP.NET MVC 项目 首先&#xff0c;在 Visual Studio 中创建一个新的 ASP.NET MVC 项目…...

MCP理解笔记及deepseek使用MCP案例介绍

文章目录 一、MCP介绍&#xff08;1&#xff09;使用MCP与之前的AI比较&#xff08;2&#xff09;原理&#xff08;3&#xff09;优点 二、deepseek使用MCP使用案例介绍 一、MCP介绍 全称 模型上下文协议 来源 由Claude母公司Anthropic于24年底开源发布 简介 AI大模型的标准化…...

# 手写数字识别:使用PyTorch构建MNIST分类器

手写数字识别&#xff1a;使用PyTorch构建MNIST分类器 在这篇文章中&#xff0c;我将引导你通过使用PyTorch框架构建一个简单的神经网络模型&#xff0c;用于识别MNIST数据集中的手写数字。MNIST数据集是一个经典的机器学习数据集&#xff0c;包含了60,000张训练图像和10,000张…...

扩展虚拟机磁盘空间并使其在Linux系统中可用的步骤总结

VMware在虚拟机扩展空间时&#xff0c;若想扩展到150G&#xff0c;那么所在盘的空闲空间须大于150G&#xff0c;否则VM将不允许扩展。 1&#xff1a;确认新磁盘空间是否被识别 使用 lsblk 或 fdisk -l 命令检查 /dev/sda 的大小是否已经更新到新的容量&#xff08;例如从原来的…...

A股周度复盘与下周策略 的deepseek提示词模板

以下是反向整理的股票大盘分析提示词模板&#xff0c;采用结构化框架数据占位符设计&#xff0c;可直接套用每周市场数据&#xff1a; 请根据一下markdown格式的模板&#xff0c;帮我检索整理并输出本周股市复盘和下周投资策略 【A股周度复盘与下周策略提示词模板】 一、市场…...