Docker部署MySQL 多库自动备份的方法(结构+数据完整,适配CentOS)
前言:本文针对Docker部署的MySQL,实现「指定多个数据库」的完整备份(含建库、建表结构+全量数据),适配CentOS服务器,结合定时任务实现自动备份,附带测试方法和避坑指南,全程实操可直接落地(已适配真实服务器环境)。
一、环境前提(已适配你的服务器)
先确认服务器Docker容器信息,避免因容器名错误导致备份失败(你的服务器实测信息):
# 查看Docker容器信息(执行命令) docker ps
你的服务器核心容器信息(重点关注MySQL):
- MySQL容器名:mysql(非mysql8,避坑重点!)
- MySQL版本:8.0.28
- 备份目录:/home/mysql-safe(已提前创建,无需额外新建)
- 系统环境:CentOS(腾讯云服务器,含系统自带星网关进程,不影响备份)
二、核心需求
- 备份内容:指定多个MySQL数据库,包含「建库语句+建表结构+全量业务数据」,可直接恢复。
- 自动备份:先测试每分钟备份(便于验证),测试完成后改为每天凌晨2点自动备份。
- 自动优化:备份文件压缩存储,自动清理7天前旧备份,避免占用过多磁盘空间。
- 稳定可靠:不影响MySQL正常运行,适配Docker容器环境,避免出现「No such container」错误。
三、完整操作步骤(全程实操)
步骤1:创建/修改多库备份脚本
脚本路径固定为 /home/mysql-safe/mysql_backup.sh,已适配你的备份目录和容器名,只需修改2个关键参数即可使用。
# 编辑脚本(执行命令) vi /home/mysql-safe/mysql_backup.sh
脚本内容(复制粘贴,修改密码和数据库名即可):
#!/bin/bash # ===================== 需修改的2个关键参数 ===================== CONTAINER_NAME="mysql" # 你的MySQL容器名(固定,无需改) MYSQL_ROOT_PASSWORD="你的MySQL真实密码" # 替换为你的root密码 BACKUP_DIR="/home/mysql-safe" # 备份目录(固定,无需改) DATABASES="db1 db2 db3" # 多个要备份的数据库,用空格隔开 # ============================================================== # 自动创建备份目录(防止目录不存在) mkdir -p $BACKUP_DIR # 备份文件命名(含时间戳,避免重复) DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/mysql_full_$DATE.sql" # 执行多库完整备份(结构+数据,无锁备份不影响业务) docker exec $CONTAINER_NAME mysqldump -u root -p$MYSQL_ROOT_PASSWORD \ --single-transaction \ --set-charset \ --databases $DATABASES > $BACKUP_FILE # 压缩备份文件(节省磁盘空间) gzip $BACKUP_FILE # 自动清理7天前的旧备份(避免磁盘占满) find $BACKUP_DIR -name "mysql_full_*.sql.gz" -mtime +7 -delete # 输出备份成功日志 echo "✅ 多库完整备份完成($(date +%Y-%m-%d %H:%M:%S)):$BACKUP_FILE.gz" }
步骤2:给脚本添加执行权限
执行命令,确保脚本可正常运行:
chmod +x /home/mysql-safe/mysql_backup.sh
步骤3:手动测试脚本(关键一步)
先手动执行脚本,验证备份是否成功,避免定时任务配置后无效果:
# 手动执行备份脚本 /home/mysql-safe/mysql_backup.sh
验证成功标准:
- 无报错信息,输出「✅ 多库完整备份完成」。
- 执行以下命令,能看到生成的 .sql.gz 压缩备份文件:
ls -lh /home/mysql-safe/
步骤4:配置定时任务(先测试,后正式)
使用crontab配置定时任务,先设置「每分钟备份」便于测试,测试无误后改为「每天凌晨2点备份」。
4.1 编辑定时任务
crontab -e
4.2 添加定时任务(当前测试版:每分钟备份)
你的服务器crontab已存在腾讯云星网关进程(无需删除,不影响),新增以下一行即可:
# 腾讯云系统自带进程(无需修改,保留) */5 * * * * flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &' # MySQL多库自动备份(测试版:每分钟执行一次) */1 * * * * /home/mysql-safe/mysql_backup.sh >> /home/mysql-safe/backup.log 2>&1
说明:日志会输出到 /home/mysql-safe/backup.log,便于查看备份是否正常。
4.3 验证定时任务是否生效
# 查看当前定时任务列表 crontab -l
能看到新增的MySQL备份任务,即为生效。
四、测试验证方法
配置好每分钟备份后,等待1-2分钟,通过以下命令验证效果:
- 查看备份文件(每分钟新增1个压缩文件):
ls -lh /home/mysql-safe/
- 查看实时备份日志(确认无报错):
tail -f /home/mysql-safe/backup.log
若日志持续输出「备份完成」,且有新增备份文件,说明测试成功。
五、正式环境配置(测试完成后必做)
每分钟备份仅用于测试,测试无误后,务必修改为「每天凌晨2点备份」,避免频繁备份占用资源:
# 重新编辑定时任务 crontab -e # 将测试版定时任务替换为正式版(每天凌晨2点执行) 0 2 * * * /home/mysql-safe/mysql_backup.sh >> /home/mysql-safe/backup.log 2>&1
六、备份恢复方法(备用)
若需恢复备份,执行以下步骤(完整恢复指定多库的结构和数据):
# 1. 解压备份文件(替换为你的备份文件名) gzip -d /home/mysql-safe/mysql_full_20260403_xxxxxx.sql.gz # 2. 执行恢复命令(容器名固定为mysql,替换密码和备份文件名) docker exec -i mysql mysql -uroot -p你的密码 < /home/mysql-safe/mysql_full_20260403_xxxxxx.sql
恢复完成后,登录MySQL即可验证数据和结构是否完整。
七、避坑指南(重点!)
- 坑1:容器名错误,报「No such container」。解决方案:确认容器名为mysql(而非mysql8),脚本中CONTAINER_NAME固定为mysql。
- 坑2:脚本无执行权限,报「Permission denied」。解决方案:执行chmod +x /home/mysql-safe/mysql_backup.sh授权。
- 坑3:备份目录不存在,备份失败。解决方案:脚本已添加mkdir -p $BACKUP_DIR,无需手动创建。
- 坑4:定时任务不生效。解决方案:确认crontab配置正确,可通过crontab -l查看,重启crond服务(systemctl restart crond)。
八、总结
本文实现了Docker部署MySQL的多库自动备份,适配你的CentOS腾讯云服务器,核心亮点:
- 适配性强:已根据你的服务器容器信息(mysql容器名、备份目录)配置,修改密码和数据库名即可使用。
- 功能完整:支持多库备份、结构+数据完整、压缩存储、自动清理旧备份。
- 易操作:全程命令复制即用,测试+正式配置清晰,新手也能快速落地。
- 稳定可靠:无锁备份不影响业务,定时任务结合日志,便于排查问题。
测试完成后记得切换到正式定时任务,避免频繁备份占用服务器资源~
到此这篇关于Docker部署MySQL 多库自动备份(结构+数据完整,适配CentOS)的文章就介绍到这了,更多相关docker mysql多库自动备份内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


最新评论