1. 创建备份脚本

mkdir -p /home/backup

cd /home/backup

vim mysql_backup.sh

#!/bin/bash

# 配置参数
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_HOST="localhost"
BACKUP_DIR="/home/backup/db"
DATE=$(date +"%Y%m%d_%H%M%S")
DAYS_TO_KEEP=7 # 保留最近7天的备份

# 创建备份目录
mkdir -p $BACKUP_DIR

# 执行备份
# 注意:--all-databases 备份所有库。(-p后面不需要空格)如果想备份单个库,用 -B database_name1 database_name2 表示备份会创建数据库,恢复时不需要再创建
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASSWORD --all-databases --single-transaction --quick | gzip > "$BACKUP_DIR/full_backup_$DATE.sql.gz"

# 检查备份是否成功
if [ $? -eq 0 ]; then
  echo "[$DATE] MySQL备份成功: $BACKUP_DIR/full_backup_$DATE.sql.gz"
else
  echo "[$DATE] MySQL备份失败!" >&2
  exit 1
fi

# 删除旧备份
find $BACKUP_DIR -name "full_backup_*.sql.gz" -mtime +$DAYS_TO_KEEP -delete

2. 设置脚本可执行权限

chmod +x /home/backup/mysql_backup.sh

3. 配置 Cron 任务实现自动化

使用 crontab -e 命令编辑定时任务。

# 每天凌晨2点执行备份
0 2 * * * /home/backup/mysql_backup.sh

# 或者,每6小时执行一次备份
# 0 */6 * * * /home/backup/mysql_backup.sh

Cron 时间表达式说明:
分钟 小时 日 月 星期 命令

  • 0 2 * * * 表示:每天第2个小时的第0分钟(即每天凌晨2:00)。

4.恢复数据库

gunzip < full_backup_20251114_173701.sql.gz | mysql -u your_username -p database_name

# 方法 1:先解压再导入(可以修改里面的use database_name恢复到新的数据库中)

gunzip -c full_backup_20251114_173701.sql.gz > backup.sql

mysql -u root -p new_database_name< backup.sql

5.查询邮件信息

cat /var/spool/mail/root

# 强制删除文件
rm -f locked_file.txt

# 强制删除目录及其所有内容
rm -rf directory_name

# 强制删除当前目录所有内容(危险!)
rm -rf *

6.用binlog + 备份恢复到具体的某个时间点(比如从2点的完整备份恢复到3点)

使用 mysqlbinlog 提取指定时间范围内的 binlog

mysqlbinlog --start-datetime="2026-01-01 02:00:00" --stop-datetime="2026-01-01 03:00:00" /var/lib/m

ysql/binlog.000015 > restore_to_point.sql

将 binlog 应用到数据库

mysql -u root -p < restore_to_point.sql