
十五年数据库相关经验,做过 DBA、架构师、技术顾问。不求"颠覆",只求"靠谱"。
翻过很多文档,也踩过很多坑。做 DBA 这些年,凌晨被叫醒的次数里,有四分之一是因为"数据丢了"或"数据坏了"。
最可怕的不是"没有备份",是"以为有备份,真到恢复时发现用不了"。
我见过太多这样的场景:备份任务每天都在跑,日志里全是"SUCCESS",没人怀疑过备份的有效性。直到某天数据库崩了,拿备份文件去恢复——报错了。备份文件损坏、备份策略有漏洞、恢复步骤没人演练过……一套组合拳下来,数据找不回来了。
这篇文章我把备份恢复的方法论整理出来,从"怎么备"到"怎么恢"到"怎么验证",每一步都说清楚。
很多人把备份和恢复当成一件事。其实它们是两件独立的事。
备份是把数据从生产环境拷贝到安全的地方。它解决的是"有没有"的问题。
恢复是把备份文件还原到生产环境,让业务重新跑起来。它解决的是"能不能用"的问题。
备份容易,恢复难。 备份是一个自动化脚本,设好定时任务就不用管了。恢复是一个手动操作,每一步都可能出错。
我的习惯:每个季度至少做一次恢复演练。不用恢复全量数据,拿一个测试库跑一遍恢复流程,确认备份文件是有效的、恢复步骤是可执行的。花两个小时验证,比丢了数据后抓瞎强一万倍。
数据库备份有三种基本方式:全量备份、增量备份、日志备份。理解它们的区别和组合方式,是设计备份策略的基础。
把整个数据库完整拷贝一份。
优点:恢复时只需要一个文件,简单直接。
缺点:数据量大时,备份时间长、占用空间大。每天做一次全量备份,磁盘很快就满了。
适用场景:数据量不大的系统,或者作为增量备份的基础。
只备份自上次备份以来发生变化的数据。
优点:备份时间短、占用空间小。
缺点:恢复时需要先恢复全量备份,再依次恢复所有增量备份。步骤多、耗时长、出错概率大。
适用场景:数据量大、变化频繁的系统。
记录所有数据变更操作(INSERT、UPDATE、DELETE),不拷贝数据本身。
优点:可以做到时间点恢复(PITR)——恢复到故障发生前的任意一秒。
缺点:日志文件增长快,需要定期清理。恢复时需要重放大量日志,耗时长。
适用场景:所有生产环境都应该开启。它是全量和增量备份的补充,不是替代。
全量 + 增量 + 日志的组合是最常用的方案:
这样,恢复时最多需要:1 个全量 + 6 个增量 + 若干日志文件。恢复时间可控,数据丢失窗口最小。
经验:备份频率要根据业务容忍度来定。如果业务能容忍丢失一小时的数据,日志备份间隔设 1 小时就够了。如果一秒都不能丢,日志就要实时同步到远端。
再好的备份策略,不验证等于没有。
恢复演练的目的不是"真的恢复",是验证三件事:
第一步:准备环境。 找一台和生產环境配置接近的服务器,装上相同版本的数据库。不要用生产服务器做演练——万一把生产库覆盖了,问题就更大了。
第二步:恢复全量备份。 把最近一次全量备份文件拷贝到测试环境,执行恢复命令。观察恢复过程有没有报错。
第三步:恢复增量备份。 依次恢复全量备份之后的所有增量备份。每恢复一个,验证一下数据量是否符合预期。
第四步:重放日志。 把日志备份文件依次重放,直到目标时间点。验证数据是否恢复到了预期状态。
第五步:验证数据。 抽样检查关键表的数据完整性。比如用户表的记录数、订单表的金额汇总,和故障前的快照对比。
第六步:记录过程。 把整个恢复过程记录下来——用了多长时间、遇到了什么问题、怎么解决的。这份记录就是下次真实恢复时的操作手册。
经验:恢复演练的频率建议是每季度一次。太频繁了占用资源,太久了忘了步骤。恢复演练的时间应该控制在 4 小时以内——如果超过 4 小时,说明恢复流程需要优化。
下面说几个我实际处理过的恢复场景。每个场景的恢复策略不同,但核心思路是一样的:先止损,再恢复,后验证。
开发人员执行了一条 DROP TABLE 或 TRUNCATE TABLE,数据全没了。
恢复步骤:
这个场景的关键是"快"。发现误操作后,第一反应不是"怎么恢复",是"先停下来别继续写"。多写一秒,恢复难度就大一分。
数据库文件被勒索软件加密,无法访问。
恢复步骤:
这个场景的关键是"离线备份"。备份文件如果和生產环境在同一个网络里,勒索软件可以一并加密。一定要有离线备份——存在独立的存储设备上,和生产网络物理隔离。
数据库所在的磁盘坏了,数据丢失。
恢复步骤:
这个场景的关键是"恢复速度"。磁盘损坏是最常见的硬件故障,恢复流程要尽量标准化、自动化。能写脚本的不要手动操作,能自动化的不要靠人记。
业务代码有 Bug,写入了错误的数据。比如批量更新了错误的字段值。
恢复步骤:
这个场景的关键是"精准"。不需要恢复整个数据库,只需要恢复被影响的数据。精准恢复可以大幅缩短恢复时间。
备份恢复是数据库运维的底线。这 5 条是我在实践中反复验证过的:
军规 1:备份一定要做,但备份不等于安全。 备份是第一步,恢复演练才是关键。没有验证过的备份,等于没有备份。
军规 2:备份要异地存放。 本地备份只能防"误操作",不能防"火灾"、"水灾"、"勒索软件"。至少有一份备份存在异地。
军规 3:恢复流程要文档化。 不要靠 DBA 的记忆来恢复。写清楚每一步操作、每一个命令、每一个参数。新人来了也能照着做。
军规 4:定期做恢复演练。 每季度至少一次。演练的结果要记录,问题要修复,流程要优化。
军规 5:监控备份任务的执行状态。 备份任务失败了要立即告警,不要等到需要恢复时才发现备份早就停了。
操作 | 命令/工具 |
|---|---|
全量备份 |
|
增量备份 |
|
binlog 查看 |
|
恢复 |
|
操作 | 命令/工具 |
|---|---|
全量备份 |
|
增量备份 | WAL 归档( |
恢复 |
|
PITR | 配置 |
操作 | 命令/工具 |
|---|---|
全量备份 | RMAN |
增量备份 | RMAN |
恢复 | RMAN |
PITR | RMAN |
备份恢复就三件事:备得全、恢得快、验得准。
备份策略要根据业务容忍度来设计,恢复演练要定期做,恢复流程要文档化。
处理过几十次数据恢复,每次回到这三件事,问题都能解决。不需要什么高级工具,方法和执行力就够了。
下一篇我会讲主从延迟排查与解决,把数据库运维高频问题系列正式收个尾。
有问题评论区见。
十五年数据库领域老炮。关注我,一起把数据库这件事搞明白。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。