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
上述方式可优化部分:
- 使用环境变量来存储敏感信息(如数据库密码),而不是直接在脚本中硬编码。
- 添加错误处理,以确保在备份过程中出现任何问题时能够得到通知。
- 在执行 mysqldump 命令时,确保密码不会被泄露在命令行历史记录中。
优化后:
- 将所需参数配置到环境变量中:
使用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
执行结果如下: