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

server/2024/12/2 6:53:10/
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.ppmy.cn/server/41832.html

相关文章

【Go】Go Swagger 生成和转 openapi 3.0.3

本文档主要描述在 gin 框架下用 gin-swagger 生成 swagger.json 的内容,中间猜的坑。以及,如何把 swagger 2.0 转成 openapi 3.0.3 下面操作均在项目根目录下执行 生成 swagger 2.0 import swagger go get -u github.com/swaggo/gin-swagger go get …

【STM32 |新建一个工程】基于标准库(库函数)新建工程

目录 STM32开发方式 库函数文件夹 建工程步骤 库函数工程建立 建立工程总结 STM32开发方式 目前stm32的开发方式主要有基于寄存器的方式、基于标准库的方式(库函数的方式)、基于HAL库的方式基于库函数的方式是使用ST官方提供的封装好的函数&…

QT---day5,通信

1、思维导图 2、TCp 服务器 #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QTcpServer> #include <QList> #include <QTcpSocket> #include <QMessageBox> #include <QDebug> #include <QTcpServer> QT_B…

学习MySQL(二):库表的操作

库的增删改查 增 -- 创建库 create database 库名 charset 字符编码; 删 -- 删除库 drop database 库名; 改 -- 修改字符编码 alter database 库名 charset 字符编码; # 注&#xff1a;一般只改字符编码&#xff0c;数据库名称是不能改的 查 -- 查询当前账户下所有的库…

AppBuilder低代码体验:构建雅思大作文组件

AppBuilder低代码体验&#xff1a;构建雅思大作文组件 ​ 在4月14日&#xff0c;AppBuilder赢来了一次大更新&#xff0c;具体更新内容见&#xff1a;AppBuilder 2024.04.14发版上线公告 。本次更新最大的亮点就是**新增了工作流&#xff0c;低代码制作组件。**具体包括&#x…

正点原子FreeRTOS学习笔记——列表与列表项

目录 一、什么是列表和列表项 1、概念 2、FreeRTOS代码 &#xff08;1&#xff09;列表 &#xff08;2&#xff09;列表项 &#xff08;3&#xff09;迷你列表项 二、列表与列表项初始化 1、列表初始化 2、列表项初始化 三、列表插入与删除列表项 1、原理解释 2、…

AD域服务器巡检指南

Active Directory (AD) 域服务器的巡检对于确保企业网络的安全性和高效运行至关重要。以下是针对AD域服务器巡检的关键活动和其重要性的优化描述&#xff1a; 保证系统安全&#xff1a; AD域服务器储存大量敏感数据&#xff0c;包括用户账户信息、策略和访问权限数据。定期巡检…

构建NFS远程共享存储

nfs-server:10.1.59.237 nfs-web:10..159.218 centos7,服务端和客户端都关闭防火墙和selinux内核防火墙&#xff0c;如果公司要求开启防火墙&#xff0c;那需要放行几个端口 firewall-cmd --add-port2049/tcp --permanent firewall-cmd --add-port111/tcp --permanent firew…