功能说明:
- 使用 docker exec 调用 mysqldump,生成 .sql 备份文件;
- 文件名中包含当前时间,保存在 mysql_backup/ 目录;
- 自动清理:
- 删除 超过 7 天的备份文件;
- 保留每月 1 号的备份文件,不管时间多久。
脚本 mysql_backup.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #!/bin/bash
CONTAINER_NAME="mysql" MYSQL_USER="dbuser" MYSQL_PASSWORD="dbpassword" BACKUP_DIR="/home/ubuntu/mysql_backup"
mkdir -p "$BACKUP_DIR"
DATE=$(date '+%Y-%m-%d_%H-%M-%S') BACKUP_FILE="${BACKUP_DIR}/backup_${DATE}.sql"
echo "开始备份:$BACKUP_FILE" docker exec "$CONTAINER_NAME" mysqldump -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" --all-databases > "$BACKUP_FILE"
echo "清理旧备份..."
find "$BACKUP_DIR" -type f -name "*.sql" | while read file; do filename=$(basename "$file") date_str=$(echo "$filename" | grep -oP '\d{4}-\d{2}-\d{2}')
if [[ -z "$date_str" ]]; then continue fi
file_ts=$(date -d "$date_str" +%s) today_ts=$(date +%s)
age_days=$(( (today_ts - file_ts) / 86400 ))
if [[ $age_days -gt 7 ]]; then day_of_month=$(date -d "$date_str" +%d) if [[ "$day_of_month" != "01" ]]; then echo "删除过期备份:$file" rm -f "$file" fi fi done
echo "备份完成。"
|
设置定时任务
设置每天 12:00 和 20:00 备份一次,并将日志写入文件。
1
| 0 12,20 * * * /home/ubuntu/mysql_backup.sh >> /home/ubuntu/mysql_backup.log 2>&1
|