docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker mysql多库自动备份

Docker部署MySQL 多库自动备份的方法(结构+数据完整,适配CentOS)

作者:m0_49126700

本文介绍了在CentOS服务器上使用Docker部署MySQL实现多库备份的方法,包括创建备份脚本、添加执行权限、测试脚本、配置定时任务、测试验证、正式环境配置和备份恢复等步骤,并提供了避坑指南,感兴趣的朋友跟随小编一起看看吧

前言:本文针对Docker部署的MySQL,实现「指定多个数据库」的完整备份(含建库、建表结构+全量数据),适配CentOS服务器,结合定时任务实现自动备份,附带测试方法和避坑指南,全程实操可直接落地(已适配真实服务器环境)。

一、环境前提(已适配你的服务器)

先确认服务器Docker容器信息,避免因容器名错误导致备份失败(你的服务器实测信息):

# 查看Docker容器信息(执行命令)
docker ps

你的服务器核心容器信息(重点关注MySQL):

二、核心需求

  1. 备份内容:指定多个MySQL数据库,包含「建库语句+建表结构+全量业务数据」,可直接恢复。
  2. 自动备份:先测试每分钟备份(便于验证),测试完成后改为每天凌晨2点自动备份。
  3. 自动优化:备份文件压缩存储,自动清理7天前旧备份,避免占用过多磁盘空间。
  4. 稳定可靠:不影响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

验证成功标准:

  1. 无报错信息,输出「✅ 多库完整备份完成」。
  2. 执行以下命令,能看到生成的 .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. 查看备份文件(每分钟新增1个压缩文件):
ls -lh /home/mysql-safe/
  1. 查看实时备份日志(确认无报错):
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即可验证数据和结构是否完整。

七、避坑指南(重点!)

八、总结

本文实现了Docker部署MySQL的多库自动备份,适配你的CentOS腾讯云服务器,核心亮点:

  1. 适配性强:已根据你的服务器容器信息(mysql容器名、备份目录)配置,修改密码和数据库名即可使用。
  2. 功能完整:支持多库备份、结构+数据完整、压缩存储、自动清理旧备份。
  3. 易操作:全程命令复制即用,测试+正式配置清晰,新手也能快速落地。
  4. 稳定可靠:无锁备份不影响业务,定时任务结合日志,便于排查问题。

测试完成后记得切换到正式定时任务,避免频繁备份占用服务器资源~

到此这篇关于Docker部署MySQL 多库自动备份(结构+数据完整,适配CentOS)的文章就介绍到这了,更多相关docker mysql多库自动备份内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文