背景
我们数据库需要进行备份,数据库使用Docker进行安装的,需要使用自动化备份,就要配合脚本、Linux的定时任务工具。
详细步骤
准备好Docker数据库备份的脚本
docker-mysqldump.sh
#!/bin/sh
# 容器名
CONTAINER_NAME="mysql-master"
# 接收数据库名作为参数
DATABASE_NAME=$1
# 当前系统时间
DATE=$(date +%Y-%m-%d)
# 压缩后的备份存放路径
TARGET_DIR="./data/$DATABASE_NAME"
# 数据库账号
DB_USER="root"
# 数据库密码
DB_PASS="123456"
# 代表删除 15 天前的备份,只保留最近 15 天的备份
DAYS=15
# 最终保存的数据库备份文件
TARGET_BAK_FILE="mysql_bak_${DATABASE_NAME}_${DATE}"
# 备份之前进入到临时备份路径中
mkdir -p "$TARGET_DIR/"
# 删除 15 天之前的备份文件 -mtime 表示文件修改时间
find "${TARGET_DIR}/" -type f -name "mysql_bak_${DATABASE_NAME}_*.sql" -mtime +$DAYS -delete
# 输出删除备份的命令
# echo "find ${TARGET_DIR}/ -type f -name \"mysql_bak_${DATABASE_NAME}_*.sql\" -mtime +$DAYS -delete"
# 备份数据
docker exec $CONTAINER_NAME mysqldump -u$DB_USER -p$DB_PASS $DATABASE_NAME --single-transaction > ${TARGET_DIR}/${TARGET_BAK_FILE}.sql
执行脚本,测试功能
# 数据库名是动态传入的
bash docker-mysqldump.sh dbName
定时任务的cron表达式
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
挂载Linux的定时任务
# crontab 定时任务编辑器, 第一次需要选择自己合适的编辑器,有些也会默认vim编辑器
crontab -e
# 一行即一个定时任务,多个即多行,脚本地址需要使用绝对路径
0 3 * * * bash /root/docker-mysqldump.sh dbName111
0 3 * * * bash /root/docker-mysqldump.sh dbName222
# 重启定时任务服务
sudo service cron restart
完结
至此,数据库备份的流程就完成了,大功告成。
本文由
程序员soulmate
原创发布于
阳光沙滩
,未经作者授权,禁止转载