温馨提示×

Debian系统MySQL备份策略如何制定

小樊
44
2025-12-28 13:26:10
栏目: 云计算

Debian 上制定 MySQL 备份策略

一 策略框架与取舍

  • 备份类型
    • 全量备份:备份全部库表与数据,恢复简单,适合作为恢复基线。
    • 增量备份:仅备份自上次备份以来的变更,体积小、频率高,依赖基线备份与日志。
    • 差异备份:备份自上次全量以来的所有变更,恢复链短于增量。
  • 备份方式
    • 逻辑备份:使用 mysqldump(可配合 mysqlpump 并行),跨版本/跨平台迁移友好,适合中小型库或需要可读 SQL 的场景。
    • 物理备份:使用 Percona XtraBackup,支持 InnoDB 热备,适合大体量、低停机的生产库。
  • 备份时机
    • 热备:业务不停机;温备:对业务影响可控;冷备:停库停机,一致性最好但影响业务。
  • 存储与保留
    • 建议本地与远程/异地双地存放;按业务 RPO/RTO 设定保留周期(如近 7 天日常恢复点,近 30 天月度基线)。
  • 自动化与治理
    • cron 定时执行;脚本化执行、日志与告警;定期校验可恢复性清理过期备份

二 推荐备份方案

  • 方案 A 逻辑备份为主(中小型库、需可读 SQL 与跨平台)
    • 全量:每日一次(如 02:00),备份命令示例:mysqldump -u 用户 -p 密码 --single-transaction --routines --triggers --default-character-set=utf8mb4 --databases 库1 库2 > /backup/mysql/full_$(date +%F).sql
    • 压缩与校验:gzip 压缩;生成并记录 SHA256 校验值;保留 7–30 天
    • 远程复制:通过 scp/rsync 同步至远程存储;失败告警。
    • 适用:变更不极端频繁、可接受小时级 RPO 的业务。
  • 方案 B 物理备份为主(大体量 InnoDB、低停机)
    • 全量:每周一次(如周日 02:00)使用 Percona XtraBackup 执行热备。
    • 增量:每日基于上次备份做增量(–incremental)。
    • 准备与恢复:恢复时按顺序执行 --prepare,最后 --copy-back;保留 2–4 周全量+增量链。
    • 适用:TB 级数据、要求近实时恢复点与低停机的在线业务。

三 实施步骤与关键命令

  • 启用二进制日志(用于增量/时间点恢复)
    • 配置 my.cnf:log-bin=mysql-bin;重启 MySQL;记录当前 binlog 位置(mysql -e “SHOW MASTER STATUS\G”)。
  • 逻辑备份脚本示例(含压缩、校验、清理与远程)
    • 关键点:使用 –single-transaction 保证一致性;gzip 压缩;find 清理 7 天前文件;rsync 同步远程。
  • 物理备份示例(XtraBackup)
    • 全量:xtrabackup --backup --target-dir=/backup/mysql/full_2025-08-10
    • 增量:xtrabackup --backup --target-dir=/backup/mysql/incr_2025-08-11 --incremental-basedir=/backup/mysql/full_2025-08-10
    • 准备:xtrabackup --prepare --apply-log-only /backup/mysql/full_2025-08-10;xtrabackup --prepare /backup/mysql/full_2025-08-10 --incremental-dir=/backup/mysql/incr_2025-08-11
    • 恢复:停库、清空数据目录、xtrabackup --copy-back、修正权限并启动。
  • 定时与监控
    • crontab 示例:0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1;配合简单日志轮转与告警(如邮件/企业微信/钉钉 webhook)。

四 恢复流程与演练

  • 逻辑备份恢复
    • 单库:mysql -u 用户 -p 密码 库名 < backup.sql;全库:mysql -u 用户 -p 密码 < full_backup.sql。
    • 时间点恢复(PITR):先恢复最近全量,再用 mysqlbinlog 重放自全量之后的 binlog 至目标时间点:mysqlbinlog --start-datetime=“YYYY-MM-DD HH:MM:SS” binlog.00000X | mysql -u 用户 -p。
  • 物理备份恢复
    • 按“全量→增量”顺序 --prepare,然后 --copy-back,启动 MySQL,校验数据一致性与复制状态(如有)。
  • 验证与演练
    • 建议每周在小环境做一次真实恢复演练;定期抽样校验 SHA256 与记录恢复耗时,确保满足 RPO/RTO

五 安全与运维要点

  • 凭据与权限
    • 避免在命令行暴露密码,使用 ~/.my.cnf 或凭据文件并设置 600 权限;备份用户仅授予 SELECT、SHOW VIEW、RELOAD、LOCK TABLES、REPLICATION CLIENT 等必要权限。
  • 加密与合规
    • 备份落盘后可 GPG 加密;传输使用 scp/rsync over SSH;按合规要求设置保留与访问控制。
  • 存储与保留
    • 本地与远程/异地双地存放;按业务设定保留(如 7 天日常 + 30 天月度),并定期清理过期备份。
  • 监控与告警
    • 记录 备份大小、耗时、成功率;失败即时告警;保留 最近 30–90 天日志便于审计。
  • 版本与工具
    • 逻辑备份优先选用 mysqlpump(并行)提升大库导出速度;物理备份使用 Percona XtraBackup 满足热备与增量需求。

0