xiaoming728

xiaoming728

Mysql 定时备份 Docker 全库数据

2025-05-23
Mysql 定时备份 Docker 全库数据

单库 Linux Shell 脚本

#!/bin/bash

# 配置参数
CONTAINER_NAME="mysql"
USER="root"
PASSWORD="admin@mysql"
DATABASE="xxx"
BACKUP_DIR="/etc/bak"
DATE=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE="$BACKUP_DIR/$DATABASE-$DATE.sql"

# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR

# 备份数据库
docker exec $CONTAINER_NAME mysqldump -u $USER -p$PASSWORD $DATABASE > $BACKUP_FILE

# 检查备份是否成功
if [ $? -eq 0 ]; then
  echo "数据库备份成功: $BACKUP_FILE"
else
  echo "数据库备份失败"
  exit 1
fi

# 可选:删除超过7天的备份文件
find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -exec rm {} \;

# 设置文件权限
chmod 600 $BACKUP_FILE

全库 Linux Shell 脚本

#!/bin/bash

# 配置参数
CONTAINER_NAME="mysql"
USER="root"
PASSWORD="admin@mysql"
BACKUP_DIR="/etc/bak"
DATE=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE="$BACKUP_DIR/all-databases-$DATE.sql"

# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"

# 全库备份
docker exec "$CONTAINER_NAME" mysqldump -u"$USER" -p"$PASSWORD" --all-databases > "$BACKUP_FILE"

# 检查备份是否成功
if [ $? -eq 0 ]; then
  echo "全库备份成功: $BACKUP_FILE"
else
  echo "全库备份失败"
  exit 1
fi

# 可选:删除超过7天的备份文件
find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -exec rm -f {} \;

# 设置文件权限
chmod 600 "$BACKUP_FILE"

Linux Cron 定时任务脚本

打开定时任务列表

crontab -e

配置执行脚本

# 每天凌晨 2 点执行
0 2 * * * /opt/mysql/mysqlbak.sh

各字段含义

*     *     *     *     *     命令
|     |     |     |     |
|     |     |     |     └───── 星期几 (0 - 7)(0和7都代表星期日)
|     |     |     └────────── 月份 (1 - 12)
|     |     └─────────────── 日期 (1 - 31)
|     └──────────────────── 小时 (0 - 23)
└───────────────────────── 分钟 (0 - 59)