docker mysql8 数据备份,每天备份,保留三个月

Docker MySQL8 每日自动备份脚本(保留 3 个月,自动清理过期)

一、前置说明

  1. 假设容器名:mysql8(替换成你实际容器名)
  2. 备份存放路径:/home/docker-home/mysql_backup(大盘存储,不占系统盘)
  3. 保留规则:90 天自动删除超期备份,每日凌晨 2 点自动执行
  4. 备份文件格式:mysql_20260711_0200.sql.gz 压缩节省空间

二、1. 创建备份目录

mkdir -p /home/docker-home/mysql_backup

 

三、2. 编写备份脚本 mysql_backup.sh

tee /home/docker-home/mysql_backup/mysql_backup.sh <<-'EOF'
#!/bin/bash
# MySQL8容器备份脚本
# 配置项
CONTAINER_NAME="mysql8"          # 你的mysql容器名称
BACKUP_DIR="/home/docker-home/mysql_backup"
DB_USER="root"
DB_PWD="你的mysql数据库root密码"
RETENTION_DAY=90                 # 保留90天(3个月)
DATE=$(date +%Y%m%d_%H%M)
BACKUP_FILE="${BACKUP_DIR}/mysql_${DATE}.sql.gz"

# 执行容器内mysqldump全库备份并压缩
docker exec ${CONTAINER_NAME} mysqldump -u${DB_USER} -p${DB_PWD} --all-databases --single-transaction --quick --lock-tables=false | gzip > ${BACKUP_FILE}

# 清理超过90天的备份文件
find ${BACKUP_DIR} -name "mysql_*.sql.gz" -type f -mtime +${RETENTION_DAY} -delete

# 输出日志
echo "[$(date +%Y-%m-%d %H:%M:%S)] 备份完成: ${BACKUP_FILE}"
EOF

修改脚本内关键参数

  • CONTAINER_NAME:改成你运行的 mysql 容器名字,docker ps 查看
  • DB_PWD:替换为 MySQL root 账号密码

四、3. 赋予脚本执行权限

chmod +x /home/docker-home/mysql_backup/mysql_backup.sh

五、4. 手动测试备份(先验证能否正常导出)

/home/docker-home/mysql_backup/mysql_backup.sh
# 执行完查看是否生成压缩包
ls -lh /home/docker-home/mysql_backup/

六、5. 设置定时任务(crontab 每日凌晨 2 点执行)

编辑定时任务

crontab -e

写入定时规则

0 2 * * * /home/docker-home/mysql_backup/mysql_backup.sh >> /home/docker-home/mysql_backup/backup_log.log 2>&1

含义:每天 02:00 自动运行备份,日志写入backup_log.log方便排错。

查看已生效定时任务

crontab -l

七、补充关键说明

1. 备份参数解释

--single-transaction:InnoDB 库热备份,无需锁表,不中断业务读写 --lock-tables=false:关闭锁表,适配生产在线环境

2. 恢复数据库备份示例

# 解压备份文件
gzip -d mysql_20260711_0200.sql.gz
# 导入到mysql容器
cat mysql_20260711_0200.sql | docker exec -i mysql8 mysql -uroot -p你的密码

3. 优化方案(可选)

  1. 异地备份:如需防磁盘损坏,可在脚本末尾加 rsync 同步备份到另一台服务器;
  2. 分库备份:只备份指定业务库,去掉--all-databases,替换为数据库名1 数据库名2
  3. 权限加固:脚本密码明文不安全,可改用容器内.my.cnf免密配置。

4. 过期清理逻辑

-mtime +90:自动删除修改时间超过 90 天的备份文件,严格实现只保留近 3 个月备份。

posted @ 2026-07-11 15:12  pxuan  阅读(7)  评论(0)    收藏  举报