创建文件夹
mkdir /storage/docker/mysql/backups && cd /storage/docker/mysql/backups
编辑脚本
vim backups.sh
#!/bin/bash
# 备份路径
BACKUP=/storage/docker/mysql/backups
# 当前时间
DATETIME=$(date +%Y-%m-%d)
# MySQL 容器名
DB_CONTAINER_NAME=mysql
# 参数介绍 : user_center (数据库名称) root (账号) jbzx@2023(密码)
DATABASES=(
"user_center root jbzx@2023"
"way_soil_cloud root jbzx@2023"
"way_wlw_cloud root jbzx@2023"
"xxl_job root jbzx@2023"
)
echo "=== 备份开始 ==="
# 创建备份目录
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
# 循环备份数据库
for DATABASE in "${DATABASES[@]}"
do
DATABASE=($DATABASE)
DB_NAME=${DATABASE[0]}
DB_USER=${DATABASE[1]}
DB_PW=${DATABASE[2]}
echo "备份文件存放于 ${BACKUP}/${DATETIME}/${DB_NAME}-${DATETIME}.sql"
docker exec ${DB_CONTAINER_NAME} mysqldump -u ${DB_USER} -p${DB_PW} ${DB_NAME} > ${BACKUP}/${DATETIME}/${DB_NAME}-${DATETIME}.sql
done
echo "=== 导出成功,开始传输 ==="
# 压缩成 tar.gz 包
cd ${BACKUP}
tar -zcvf ${DATETIME}.tar.gz ${DATETIME}
# 删除备份目录
rm -rf ${BACKUP}/${DATETIME}
# 删除60天(不含)前备份的数据
find ${BACKUP} -mtime +60 -name "*.tar.gz" -exec rm -rf {} \;
echo "=== 数据库备份完成 ==="
如果数据库不在当前主机上,可以复制博主的脚本去让chatgpt帮你修改
修改脚本权限
chmod +x backups.sh
使用定时任务执行脚本
crontab -e
0 2 * * * 存放脚本的路径/backups.sh >> 存放日志的路径/backup.log 2>&1
查看详情
crontab -l