【脚本】使用脚本备份docker中部署的mysql数据库

news2025/4/5 21:22:07
v1版本明文密码方式

#!/bin/bash

# 定义 MySQL 容器名称和数据库信息
container_name="mysql_container"
db_user="root"
db_password="your_password"

# 定义要备份的数据库列表
databases=("database1" "database2" "database3")

# 定义备份文件保存路径
backup_dir="/host/path/to/backup"

# 创建备份文件保存目录
mkdir -p ${backup_dir}

# 获取当前时间作为备份文件名的一部分
timestamp=$(date +"%Y%m%d%H%M%S")

# 循环备份每个数据库
for db_name in "${databases[@]}"
do
    backup_file="${backup_dir}/${timestamp}_backup_${db_name}.sql"

    # 使用 Docker 执行 mysqldump 命令备份数据库
    docker exec ${container_name} mysqldump -u ${db_user} -p${db_password} ${db_name} > ${backup_file}

    if [ $? -eq 0 ]; then
        echo "数据库 ${db_name} 备份成功!备份文件路径:${backup_file}"
    else
        echo "数据库 ${db_name} 备份失败!"
    fi
done
上述方式可优化部分
  1. 使用环境变量来存储敏感信息(如数据库密码),而不是直接在脚本中硬编码。
  2. 添加错误处理,以确保在备份过程中出现任何问题时能够得到通知。
  3. 在执行 mysqldump 命令时,确保密码不会被泄露在命令行历史记录中。

优化后

  1. 将所需参数配置到环境变量中:

使用vi命令编辑文件

vi ~/.bashrc

在文件中插入你的配置信息,保存退出

export CONTAINER_NAME="your_mysql_container"
export DB_USER="root"
export DB_PASSWORD="your_secure_password"
export BACKUP_DIR="/path/to/your/backup/directory"

使更改立即生效,需要重新加载 .bashrc 文件

source ~/.bashrc

通过运行以下命令来验证环境变量是否已正确设置

echo $CONTAINER_NAME
echo $DB_USER
echo $DB_PASSWORD
echo $BACKUP_DIR

v2版本脚本

#!/bin/bash

# 使用环境变量存储敏感信息
container_name="${CONTAINER_NAME:-mysql_container}"
db_user="${DB_USER:-root}"
db_password="${DB_PASSWORD:-your_password}"

# 定义要备份的数据库列表
databases=("database1" "database2" "database3")

# 定义备份文件保存路径
backup_dir="${BACKUP_DIR:-/host/path/to/backup}"

# 创建备份文件保存目录
mkdir -p ${backup_dir}

# 获取当前时间作为备份文件名的一部分
timestamp=$(date +"%Y%m%d%H%M%S")

# 循环备份每个数据库
for db_name in "${databases[@]}"
do
    backup_file="${backup_dir}/${timestamp}_backup_${db_name}.sql"

    # 使用 Docker 执行 mysqldump 命令备份数据库,确保密码不会被泄露
    docker exec ${container_name} sh -c "mysqldump -u ${db_user} -p${db_password} ${db_name}" > ${backup_file}

    if [ $? -eq 0 ]; then
        echo "数据库 ${db_name} 备份成功!备份文件路径:${backup_file}"
    else
        echo "数据库 ${db_name} 备份失败!"
    fi
done

执行结果如下:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1677683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pyenv 之 python 多版本管理(win11)

1. 背景 常常会用到Python的多个版本,因此可以使用Pyenv来对Python版本进行管理。 2. win11下载 pyenv 在终端执行下载语句: pip install pyenv-win --target D:\software\pyenv 其中 D:\software\pyenv 为你想要下载到的文件目录,建议在 …

数据中台管理系统原型

数据中台是一个通用性的基础平台,适用于各类行业场景,数据中台包含多元数据汇聚、数据标准化、数据开发、数据共享、数据智能、数据资产管理等功能,助力企业数字化转型。 数据汇聚 数据汇聚是将不同系统、不同类型的多元源数据汇聚至目标数据…

动态规划-两个数组的dp问题3

文章目录 1. 两个字符串的最小ASCII删除和(712)2. 最长重复子数组(718) 1. 两个字符串的最小ASCII删除和(712) 题目描述: 状态表示: 根据经验以及题目要求,建立二维数…

深度解析YOLOV9,目标检测算法(附论文和源码)|

目录 一、YOLOV9 1、概述: 2,论文摘要: 输入数据在前馈过程中可能会有不可忽略的信息丢失。这种信息丢失会导致梯度流出现偏差,而梯度流又被用于更新模型。上述问题会导致深度网络在目标和输入之间建立不正确的关联&#xff0c…

【千帆AppBuidler】零代码构建AI人工智能应用,全网都在喊话歌手谁能应战,一键AI制作歌手信息查询应用

欢迎来到《小5讲堂》 这是《千帆平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景创建应用平台地址随机生成快速创建应用头像应用名称应用描述…

Python自动化神器:如何用PyAutoGUI模拟滚轮动一次

哈喽,大家好,我是木头左! 一、PyAutoGUI简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序控制鼠标和键盘操作。它主要在三个方面发挥作用:1)对屏幕上的图像进行识别;2&#xf…

8.11 矢量图层线要素单一符号使用二

文章目录 前言箭头(Arrow)QGis设置线符号为箭头(Arrow)二次开发代码实现 总结 前言 本章介绍矢量图层线要素单一符号中箭头(Arrow)的使用说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps 箭头(Arr…

【制作100个unity游戏之26】unity2d横版卷轴动作类游戏5(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言三段攻击攻击设置只对敌人造成伤害限制可以移动攻击问题 角色连续按四下攻击,最后会多a一下问题:站在原地连续攻击野猪,只有第一下攻击野猪才掉血,后面的攻击野猪不掉血源码完结 …

数据结构复习指导之图的存储及基本操作

文章目录 图的存储及基本操作 考纲内容 复习提示 1.邻接矩阵法 2.邻接表法 3.十字链表 4.邻接多重表 5.图的基本操作 图的存储及基本操作 图的存储必须要完整、准确地反映顶点集和边集的信息。根据不同图的结构和算法,采用不同的存储方式将对程序的效率产生…

八字排盘软件有哪些?

八字排盘软件是根据中国传统命理学中的生辰八字(即一个人出生的年、月、日、时)来分析个人命运和运势的工具。以下是一些可用的八字排盘软件: 无敌八字排盘算命软件 - 精准的八字排盘,全完免费,有手机版电脑版&#xf…

CentOS 安装 SeaweedFS

1. SeaweedFS 介绍 SeaweedFS 是一个简单且高度可扩展的分布式文件系统。有两个目标: to store billions of files! (存储数十亿个文件!)to serve the files fast! (快速提供文件!) Seaweedfs的中心节点(center master&#xff09…

Stable Diffusion基础界面介绍

SD是stable diffusion的简称,AI绘画的一个开源应用,(不需要科学上网),目前使用的版本是B站UP秋葉aaaki整理的最终版。 安装教程详见 B站up主 秋葉aaaki,教程下有提供stable diffusion的下载链接。 安装必要的三个基础…

接口文档编写注意事项

接口文档编写注意事项 字段方面 ①不需要的字段、逻辑中固定值的字段(可写死的字段)不提供 ②逻辑上可以合并的字段合并 例如:当一个互斥条件下,分别返回了两个字段,这个时候就可以在这个基础上将两个字段合并成一个…

UEC++学习(十五)创建、查找、加入会话

创建会话 基于上篇配置steam在线子系统之后&#xff0c;在Character.h中声明一个会话创建完成时的委托以及回调函数。 #include "Interfaces/OnlineSessionInterface.h"public://指向在线会话界面的指针,将会话接口存储在里面TSharedPtr<class IOnlineSession, ES…

Spring AOP(概念,使用)

目录 Spring AOPAOP是什么什么是Spring AOPAOP实际开发流程1. 引入依赖2. 编写AOP程序 Spring AOP详解Spring AOP中的核心概念Spring AOP的通知类型六种类型PointCutOrder(切面优先级) Spring AOP AOP是什么 Aspect Oriented Programminig(面向切面编程)切面指的是某一类特定…

Keli5烧写程序成功后再次烧写程序却不能识别芯片。解决方法

1问题&#xff08;已排除硬件问题和Debug配置问题&#xff09; 再次烧写不能识别下如图&#xff08;提示为不能识别到芯片&#xff09; 硬件识别正常 Debug配置正常 就是不能识别到芯片 2为什么会出现这个问题 在STM32Cude设置中没有设置SYS&#xff08;默认是No Debug&…

如何判断点在多边形内部:OpenCV--cv2.pointPolygonTest()方法详解

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

HTML常用标签-超链接标签

超链接标签 点击后带有链接跳转的标签 ,也叫作a标签 href属性用于定义连接 href中可以使用绝对路径,以/开头,始终以一个固定路径作为基准路径作为出发点href中也可以使用相对路径,不以/开头,以当前文件所在路径为出发点href中也可以定义完整的URL target用于定义打开的方式 _b…

照片误删如何恢复?这些方法帮你重拾回忆!

手机照片是我们记录美好时刻的重要工具。但有时我们会因为不小心或者错误操作而导致珍贵照片的丢失。那些与家人、朋友共度的美好时刻、旅途中的风景、重要的纪念日&#xff0c;一旦删除&#xff0c;就如同从记忆中抹去&#xff0c;令人惋惜不已。幸运的是&#xff0c;随着科技…

【AI智能体】零代码构建AI应用,全网都在喊话歌手谁能应战,一键AI制作歌手信息查询应用

欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 文心智能体大赛背景创建应用平台地址快速构建【基础配置】…