自带压缩、自动清理旧备份、日志记录,搭配 crontab 实现定时自动化备份
先创建备份目录
mkdir -p /backup/mysql
-p 参数会自动创建父目录 /backup 和子目录 /backup/mysql,一步到位
再创建脚本文件
nano /backup/mysql_backup.sh
MySQL 定时全量备份脚本
#!/bin/bash
# MySQL 全量备份脚本 (mysqldump)
# ===================== 配置项(直接填你的信息)=====================
# MySQL 用户名
DB_USER="wp_user"
# MySQL 密码
DB_PASS="wp123456"
# 要备份的数据库名
DB_NAME="wp_db"
# 备份文件存放目录
BACKUP_DIR="/backup/mysql"
# 备份保留天数(超过自动删除)
RETENTION_DAY=7
# 备份日期格式
DATE=$(date +%Y%m%d_%H%M%S)
# ===================== 执行备份 =====================
# 创建备份目录(不存在则自动创建)
mkdir -p $BACKUP_DIR
# mysqldump 全量备份 + 压缩
mysqldump -u$DB_USER -p$DB_PASS --single-transaction --default-character-set=utf8mb4 $DB_NAME | gzip > $BACKUP_DIR/$DB_NAME-$DATE.sql.gz
# ===================== 清理旧备份 =====================
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAY -delete
# ===================== 备份日志 =====================
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 备份完成:$BACKUP_DIR/$DB_NAME-$DATE.sql.gz" >> $BACKUP_DIR/backup.log
赋予执行权限
chmod +x /backup/mysql_backup.sh
测试脚本(手动运行一次)
/backup/mysql_backup.sh
执行后,去 /backup/mysql 目录查看,会生成 .sql.gz 备份文件
设置定时任务(每天凌晨 2 点自动备份)
# 编辑定时任务
crontab -e
#文本最后一行添加
0 2 * * * /backup/mysql_backup.sh
备份文件管理
备份文件位置:/backup/mysql/文件名格式:wp_db-20260521_020000.sql.gz
恢复备份命令:
# 解压备份文件
gzip -d wp_db-20260521_020000.sql.gz
# 恢复数据库
mysql -uwp_user -pwp123456 wp_db < wp_db-20260521_020000.sql