MySQL 自动化定期备份及故障恢复

一、备份策略设计:全量+增量+Binlog三级防护

1. 全量备份(基础锚点)
  • 适用场景:中小型数据库(<1TB)、每日/每周备份。

  • 工具推荐 :

    • mysqldump:逻辑备份,兼容性好,支持 --single-transaction(InnoDB表一致性)。
    • Percona XtraBackup:物理备份,热备份无锁表,适合大数据库(TB级)。
  • 示例命令 :

    bash 复制代码
    # mysqldump全量备份(每日凌晨2点)
    mysqldump -u admin -p'SecurePass' --single-transaction --routines --triggers --databases my_db | gzip > /backup/full_$(date +%Y%m%d).sql.gz
    
    # XtraBackup全量备份
    xtrabackup --backup --user=admin --password=SecurePass --target-dir=/backup/xtra_full
2. 增量备份(高频变更)
  • 基于Binlog:记录数据变更,适合高频写入场景。需先全量备份,后仅备份Binlog。
  • 配置步骤 :
    • 开启Binlog:log_bin=mysql-bin(my.cnf配置)。

    • 增量备份脚本:

      bash 复制代码
      mysqlbinlog --read-from-remote-server --host=localhost -u admin -p'SecurePass' --start-position=$(mysql -u admin -p'SecurePass' -e "SHOW MASTER STATUS" | awk '/mysql-bin/{print $2}') mysql-bin.000002 > /backup/incremental_$(date +%H%M).sql
3. 备份保留策略
  • 全量备份:保留2-7份(按周/月归档)。
  • 增量备份:保留24-72小时(根据业务容忍度)。
  • Binlog :配置 expire_logs_days=7 自动清理。

二、自动化实现:Cron+脚本+云工具

1. Linux Cron定时任务
  • 示例脚本 (/backup/mysql_backup.sh):

    bash 复制代码
    #!/bin/bash
    BACKUP_DIR="/backup/mysql"
    DATE=$(date +%Y%m%d_%H%M%S)
    DB_USER="admin"
    DB_PASS="SecurePass"
    DB_NAME="my_db"
    
    # 全量备份
    mysqldump -u $DB_USER -p$DB_PASS --single-transaction --databases $DB_NAME | gzip > $BACKUP_DIR/full_$DATE.sql.gz
    
    # 增量备份(每小时)
    mysqlbinlog --read-from-remote-server --host=localhost -u $DB_USER -p$DB_PASS --start-position=$(mysql -u $DB_USER -p$DB_PASS -e "SHOW MASTER STATUS" | awk '/mysql-bin/{print $2}') mysql-bin.000002 > $BACKUP_DIR/incremental_$DATE.sql
  • Cron配置 (每日凌晨2点全量+每小时增量):

    bash 复制代码
    crontab -e
    0 2 * * * /bin/bash /backup/mysql_backup.sh  # 全量
    0 * * * * /bin/bash /backup/incremental_backup.sh  # 增量
2. 云数据库自动化工具
  • AWS RDS :通过 AWS Backup 配置每日全量备份+按需增量,支持跨区域复制。
  • 阿里云RDS:自动备份策略(可设置保留天数、备份周期),支持按时间点恢复。
  • 腾讯云CDB:自动备份+手动快照,支持秒级恢复。

三、故障恢复:全量+增量+Binlog时间点恢复

1. 全量备份恢复
  • 逻辑备份恢复 :

    bash 复制代码
    gunzip -c /backup/full_20251204.sql.gz | mysql -u admin -p'SecurePass' my_db
  • XtraBackup恢复 :

    bash 复制代码
    xtrabackup --copy-back --target-dir=/backup/xtra_full
    chown -R mysql:mysql /var/lib/mysql
    systemctl restart mysqld
2. 增量+Binlog时间点恢复
  • 步骤 :
    1. 恢复最近全量备份:mysql < full_backup.sql

    2. 应用增量备份:mysql < incremental_backup.sql

    3. 应用Binlog到故障前时间点:

      bash 复制代码
      mysqlbinlog --stop-datetime="2025-12-04 14:30:00" mysql-bin.000003 | mysql -u admin -p
3. 主从复制环境恢复
  • 主库故障 :
    • 提升从库为主库,从全量备份+Binlog恢复数据。
  • 从库故障 :
    • 重建从库:重新导入主库全量备份,配置复制同步。
相关推荐
数据库急诊室_阿哲4 小时前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
goehou4 小时前
让 AI 替我操作这台电脑,先把手能伸多远定下来
windows·自动化·权限管理·ai agent
青瓦梦滋4 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
慧都小妮子5 小时前
Wyn商业智能国产数据库适配:数据接入、分析缓存与审计日志验证清单
数据库·数据分析·数据可视化·审计日志·商业智能
Frankie_stand5 小时前
测试自动化实战指南:从脚本化、自动判据到 CI 集成的完整落地路径
android·ci/cd·自动化
Joy T6 小时前
Redis Lua 原子限流:Lua 脚本、竞态条件与并发控制
数据库·redis·lua·限流·竞态条件·redis scripting
杨凯凡6 小时前
MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战
数据库·spring boot·mysql
Aloudata6 小时前
Claude 做数据分析的这两年:一份复盘与发展线索
大数据·数据库·人工智能·数据挖掘·数据分析·dataagent
Decay__7 小时前
01_SQLServer 体系架构全解 —— 实例进程、关系引擎、SQLOS 与事务日志深入
运维·数据库·sql·mysql·架构
zhanghaha13147 小时前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#