想象一下,你的数据库就像一个巨大的图书馆档案馆,里面有成千上万本书。全量备份就像每天晚上派快递员把所有书都复印一遍。可如果其实几乎没啥变化呢?这样不仅慢,还会让运输压力山大,占用超多空间。这时候,增量和差异备份就派上用场了。我们要聪明点,只备份真正变了的东西,而不是啥都备份。
今天我们要聊的备份类型有:
- 全量备份:把整个数据库都复制一份。
- 增量备份:只复制自上次备份以来发生变化的内容。
- 差异备份:复制自上次全量备份以来的所有变化。
每种方式都有自己的优点、缺点和适用场景。咱们慢慢说清楚。
全量备份
全量备份(Full Backup)就是把数据库在某一时刻的完整快照保存下来。它包含了数据库的结构(表、索引、schema)和所有数据。简单说,就是数据库的“快照”。
全量备份命令示例:
pg_dump -U 用户名 -d 数据库名 -F c -f full_backup.dump
这里:
-U 用户名— PostgreSQL 用户名。-d 数据库名— 数据库名字。-F c— 备份格式(custom,方便用pg_restore恢复)。-f full_backup.dump— 备份文件名。
关于 pg_dump 及其参数的详细用法,咱们后面几节课还会讲到 :P
全量备份的优点:
- 恢复简单。 如果出问题了,全量备份能让你一键恢复整个数据库。
- 完整数据快照。 可以用来把整个数据库迁移到别的服务器或环境。
全量备份的缺点:
- 数据量大:全量备份可能非常大,尤其是数据量多的时候。
- 耗时长:数据越多,备份越慢。
- 存储空间:每次全量备份都要占一份空间,容易吃掉存储资源。
全量备份适合这些场景:
- 第一次做备份的时候。
- 在数据库要做重大变更前。
- 做长期归档(全量备份后丢到“冷”存储里)。
增量备份
增量备份(Incremental Backup)只保存自上次备份(无论是全量还是增量)以来发生变化的文件。这样能大大节省磁盘空间,也让备份速度更快。
在 PostgreSQL 里,增量备份可以用 pgBackRest 工具来实现 —— 这是个很强大的工具,支持全量、增量和差异备份策略,专门为 PostgreSQL 设计的。
pgBackRest 怎么工作?
pgBackRest用元数据和文件校验和来判断哪些文件变了。- 只有真正变过的文件才会被包含进增量备份。
- 支持自动归档 WAL 文件,这样你可以恢复到任意时间点。
增量备份命令示例:
pgbackrest --stanza=main --type=incr backup
这里:
--stanza=main— 配置名(针对某个数据库的一组参数)。--type=incr— 指定做增量备份。
第一次做增量备份前,必须先做一次全量(--type=full)。
用 pgBackRest 做增量备份的优点:
- 省空间:只备份变过的文件。
- 速度快:尤其是改动不多的时候。
- 自动管理 WAL:pgBackRest 会自动归档和应用 WAL 文件。
- 恢复灵活:可以选定恢复到某个时间点(PITR)。
缺点和注意点:
- 需要初始配置:要配置
stanza、仓库目录、权限等。 - 对新手有点难:需要理解 WAL 和 PostgreSQL 架构。
- 依赖仓库:所有备份都集中存放,得好好管理存储。
什么时候用增量备份:
- 数据库经常有更新。
- 全量备份太大或太慢。
- 想要自动化、可靠、成本低的恢复策略。
差异备份
差异备份(Differential Backup)会保存自上次全量备份以来的所有变化。和增量备份不同,每次差异备份都包含自上次全量备份以来的所有变动。这样,恢复时只需要最后一次全量备份和最后一次差异备份就够了。
流程举例:
- 第一天晚上:做一次全量备份(A)。
- 第二天晚上(B):做一次差异备份 —— 包含自 A 以来的变化。
- 第三天晚上(C):再做一次差异备份 —— 还是包含自 A 以来的变化。
优点:
- 恢复简单:只需要全量备份和最后一次差异备份就能恢复。
- 比全量备份快:差异备份只复制变化的内容,速度比全量快。
缺点:
- 备份文件越来越大:每做一次差异备份,文件就会变大,因为它包含自全量备份以来的所有变化。
- 磁盘空间:长期来看,可能比增量备份更占空间。
差异备份适合想要简化恢复流程的场景:它保存了自上次全量备份以来的所有变化。特别适合数据经常变,但每次都做全量备份太耗时或太费资源的情况。差异备份就是速度和可靠性的一个好折中。
备份类型对比
| 备份类型 | 全量 | 增量 | 差异 |
|---|---|---|---|
| 数据量 | 最大 | 最小 | 中等 |
| 备份时间 | 很久 | 很快 | 一般 |
| 恢复 | 简单 | 复杂(依赖所有备份) | 中等(需要最后全量和差异) |
| 适用场景 | 初次备份、迁移 | 实时频繁备份 | 定期备份 |
选哪种备份方式,得看你对数据安全的要求、数据更新频率和资源情况。小型数据库可以定期全量备份。数据库越来越大时,增量备份能帮你省空间。如果你更看重恢复速度,差异备份可能是最优选。最重要的是——记得定期备份和自动化配置!
GO TO FULL VERSION