Skip to main content
备份分为逻辑备份(mysqldump)与物理备份(拷贝数据文件/专业工具)。本节以逻辑备份为主,介绍一致性快照、增量恢复思路,并补充常见的自动化与验证方法。

备份策略概览

  • 全量备份:周期性生成完整数据副本(每日/每周)
  • 增量备份:依赖二进制日志(binlog)或物理增量工具填补两次全量之间的数据
  • 异地存储:将备份推送至对象存储或异地机房,防止单点故障
  • 定期演练:验证恢复流程与 RPO/RTO 是否符合预期
制定备份策略时先明确恢复目标:可接受的数据丢失时间(RPO)与恢复所需时长(RTO)。

全量逻辑备份(在线)

  • --single-transaction:InnoDB 在线一致性快照(避免锁表)
  • --routines/--triggers/--events:包含对象
  • --master-data=2:在备份开头记录二进制日志位点,便于增量恢复
  • 可配合 --set-gtid-purged=ON(GTID 模式)
对于大库,可使用 mysqlpump(并行导出)或 Percona XtraBackup(物理热备)。

压缩与拆分

压缩可显著减少存储,拆分便于上传对象存储。

恢复

恢复前可先在空库中执行 DROP DATABASE shop; CREATE DATABASE shop; 确保干净状态。

二进制日志与增量

启用 binlog 后,可进行点时间恢复(PITR):
  1. 恢复最近一次全量
  2. 从全量时间点开始回放 binlog 至目标时刻
也可使用 --start-position/--stop-position 精确控制回放范围。
PITR 对时间精度与服务器时区敏感;强烈建议定期演练恢复流程,并记录每次备份对应的 binlog 位点。

物理备份概述

  • Percona XtraBackup:开源热备工具,支持增量备份与速度快
  • MySQL Enterprise Backup:官方商业版本,提供加密与压缩
  • 文件系统快照:借助 LVM、ZFS 或云盘快照结合 FLUSH TABLES WITH READ LOCK
物理备份速度快、可恢复到完全一致的数据目录,适合大规模数据量场景。

校验与演练

  • 校验备份文件完整性:mysql --force < backup.sql 是否失败
  • 使用 pt-table-checksumCHECKSUM TABLE 校验主备一致性

自动化建议

备份脚本需包含:
  • 设置 set -euo pipefail 保证异常立刻退出
  • 生成日期命名的备份文件
  • 上传或同步至对象存储(AWS S3、阿里云 OSS 等)
  • 发送备份结果通知(邮件/IM)

导入导出片段

若需导出 CSV,可使用 SELECT ... INTO OUTFILE 并指定分隔符。

常见问题与排查

  • 锁表:MyISAM 或显式锁可能导致备份等待;建议使用 InnoDB + --single-transaction
  • 大文件:使用管道压缩 | gzip > backup.sql.gz
  • 字符集:注意 --default-character-set=utf8mb4
  • 权限:备份账号需具备 SELECT, LOCK TABLES, SHOW VIEW, TRIGGER 权限

小结

建立“全量 + binlog 增量”的策略并定期演练,才能保证可靠恢复。备份脚本、日志与校验同样重要,请将备份操作纳入日常运维流程。