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

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[@]}"
dobackup_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 ]; thenecho "数据库 ${db_name} 备份成功!备份文件路径:${backup_file}"elseecho "数据库 ${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[@]}"
dobackup_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 ]; thenecho "数据库 ${db_name} 备份成功!备份文件路径:${backup_file}"elseecho "数据库 ${db_name} 备份失败!"fi
done

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

回归预测 | Matlab实现SMA-GPR黏菌算法优化高斯过程回归多变量回归预测

回归预测 | Matlab实现SMA-GPR黏菌算法优化高斯过程回归多变量回归预测 目录 回归预测 | Matlab实现SMA-GPR黏菌算法优化高斯过程回归多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现SMA-GPR黏菌算法优化高斯过程回归多变量回归预测 1.Matlab实现…

tomcat--java的安装

组成 语言、语法规范。关键字,如: if、for、class等源代码 source code依赖库,标准库(基础)、第三方库(针对某些应用)。由于底层代码太难使用且开发效率低,封装成现成的库JVM虚拟机。将源代码编译为中间码即字节码后,再运行在JVM之上 jdk和jre 概念 j…

win server服务器 关闭危险端口 135,137,138,139,445的方法

通过防火墙来控制 打开控制面板 选择检查防火墙状态 选择高级设置 选择入站规则,再新建规则 选择端口,下一步 选择端口应用于啥协议,再指定端口,再下一步 选择阻止连接,下一步 下一步 给规则别名一下,方便…

解决离线服务器无法加载HuggingFaceEmbeddings向量化模型的问题

由于服务器是离线的,因此我先在本地到huggingface官网下载模型text2vec,然后上传到服务器上运行,报错: (MaxRetryError(HTTPSConnectionPool(host\huggingface.co\, port443): Max retries exceeded with url: /api/models/senten…

C语言 8 函数递归

目录 1. 递归是什么? 2.递归的限制条件 3. 递归举例1 4. 递归举例2 5.迭代 6. 递归举例3 拓展学习: 1. 递归是什么? 递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢? 递归其实是⼀种解决问题的⽅法&#xff0c…

2024全新小狐狸AI免授权源码

源码安装说明: 下 载 地 址 : runruncode.com/php/19757.html 1. 在宝塔新建一个站点,选择 PHP 版本为 7.2、7.3 或 7.4。将压缩包上传到站点的根目录,并设置运行目录为 /public。 2. 导入数据库文件,该文件位于 …

电脑D盘XLS文件怎么恢复?6个恢复方法,找回丢失的文件!

在日常工作和学习中,我们经常会使用到XLS文件,也就是Excel表格文件。然而有时由于误操作或其他原因,我们可能会发现电脑D盘中的XLS文件突然不见了。这时如何快速、有效地恢复这些文件,成为了我们待解决的问题。本文将为大家介绍五…

Android 异常开机半屏重启代码分析

Android 的稳定性是 Android 性能的一个重要指标,它也是 App 质量构建体系中最基本和最关键的一环;如果应用经常崩溃,或者关键功能不可用,那显然会对我们的留存产生重大影响所以为了保障应用的稳定性,我们首先应该树立…

【JavaEE 初阶(六)】网络编程

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多网络知识 目录 1.前言2.浅谈网络2.1基本知识2.2.OSI与TCP/IP 3.网络编程3.1TCP与UDP区别3.2UDP网路编程…

webpack生成模块关系依赖图示例:

npm i -D webpack-bundle-analyzer core-js babel-loaderwebpack.config.js const BundleAnalyzerPlugin require(webpack-bundle-analyzer).BundleAnalyzerPlugin; module.exports {entry: ./src/index.js,output: {filename: main.js,},// mode: production, // 或者 produ…

圈子系统开发,圈子系统源码, 圈子论坛系统,兴趣社区圈子论坛,一站式搭建,前端uniapp,后端think PHP

简述 圈子论坛社区系统,含完整的后台PHP系统。功能:小程序授权登陆,H5和APP,手机号登陆,发帖,建圈子、发活动。圈主可置顶推荐帖子,关注、点赞、评论、交流等。可作为圈子贴吧等自媒体。 兴趣…

gradle 共享存储挂载缓存目录的问题

2个任务同时构建的时候,报错如上。 原因:挂载目录的问题导致的,挂在最小粒度的目录下。 /home/app/.gradle/caches/modules-2/files-2.1 挂载到这个级别的目录下。