
说到数据安全,PG数据库的备份还原绝对是每个DBA都得啃下的硬骨头。我见过不少团队,数据库跑得欢,备份策略却一塌糊涂,等真出了事才急得跳脚。这玩意儿不是用上pgdump就万事大吉了,得从实战角度把每个环节摸透。今天咱们就聊聊,怎么把这套技能练熟,让数据安全不再是空话。
先讲备份。pgdump是PG自带的逻辑备份工具,用起来简单,但坑也不少。比如,你跑个,默认会把整个库的结构和数据全倒出来。可要是库里有上亿条记录,这文件能大到让你怀疑人生。更关键的是,它默认是串行执行,碰上大表,速度慢得像乌龟爬。这时候就得用参数,比如,能并行导出,快好几倍。但并行有代价——你得确保服务器内存扛得住,不然CPU飙到100%,其他业务跟着遭殃。还有个坑是权限问题,pgdump需要你至少是表的所有者或超级用户,否则导出的数据不全。我有个朋友,跑备份时忘了加,结果连到远程库,导了半小时才发现数据不对。所以,每次备份前,先拿小库测试下,别等到生产环境翻车。
再聊物理备份。pgdump适合小库,但大库或高并发场景下,更推荐用pgbasebackup。这工具做的是物理备份,直接复制整个数据目录,速度比逻辑备份快得多。比如,你跑,它会生成一个压缩的tar包,还能带上WAL日志。WAL是PG的命根子,没它你根本没法做增量恢复。但物理备份也有讲究——你得先确认PG开启了归档模式。在nf里设个,再配个,比如,这样WAL日志才能持续写入。否则,你备份的数据目录可能跟当前状态不一致,恢复时直接崩。另外,pgbasebackup默认是全量备份,如果你磁盘空间紧张,可以考虑结合连续归档做增量,但复杂度高,新手容易搞混。我建议,初期先用全量备份加WAL归档,等熟练了再玩增量。
说完备份工具,得讲还原。还原是检验备份质量的唯一标准,很多团队备份做得漂亮,真到恢复时才发现文件损坏或版本不匹配。逻辑还原用psql就行,比如。但有个常见问题——如果你备份时用了格式(自定义格式),就得用pgrestore来恢复,比如。pgrestore比psql灵活,支持并行还原和选择性恢复,比如只恢复某些表。但并行有副作用——如果你的目标库有其他连接,可能会锁表,导致恢复卡住。所以还原前,最好把其他连接全断掉,用。还有个细节:备份和还原的PG版本要一致,不然可能报错。我见过有人用PG14备份,还原到PG15,结果数据类型不兼容,全崩了。升级版本时,得先用pgupgrade,别图省事。
物理还原就复杂些。用pgbasebackup的备份,你得先解压tar包,然后恢复数据目录。比如,,再启动PG服务。但光这样不够,还得重放WAL日志。如果你没做归档,WAL可能不完整,数据会缺失。正确的做法是:先停掉PG服务,清空数据目录,恢复备份文件,再配置nf或使用文件,指向归档目录。然后启动PG,它会自动重放WAL到最新状态。我有个同事,还原时忘了配nf,结果数据只恢复到备份时间点,丢了24小时的数据。所以,每次还原后,用检查下状态,确保没报错。
实战中,备份策略比工具更重要。我见过有人每天跑一次全量备份,结果磁盘空间撑爆,恢复时还得从一周前的备份开始,数据丢失严重。更合理的做法是:每周一次全量备份,每天一次增量备份(基于WAL)。全量备份用pgbasebackup或pgdump,增量靠WAL归档。比如,你在crontab里设个,每周日凌晨2点跑全量。然后每天零点跑,强制切换WAL,再归档到远程NAS。这样,万一出问题,最多丢1小时数据。但注意,WAL归档目录得定期清理,不然会堆到几十GB。清理时别手动删,用工具,它会自动保留最近的归档。还有个细节:备份文件别只放本地,得同步到异地或云存储,不然机房断电,备份跟着完蛋。
得聊聊恢复的测试。很多人备份做得勤快,但一次都没恢复过。真到灾难时,才发现备份文件损坏、工具不兼容或网络不通。我建议,至少每季度做一次恢复演练。比如,在测试环境搭个新实例,用备份文件还原,然后模拟业务查询,验证数据一致性。如果发现某个表的数据对不上,赶紧查备份脚本或WAL归档。还有个小技巧:备份时加上参数,能记录详细日志,恢复时对照看,快速定位问题。比如,,它会输出每张表的导出时间,如果某张表特慢,说明索引或数据有问题。另外,恢复完别急着上线,先跑个更新统计信息,再建好索引,否则查询性能会打折扣。
说到底,PG数据库备份还原不是技术活,而是习惯活。你得把备份当日常任务,把还原当必备技能。别等到数据丢了才后悔,也别以为有了工具就万无一失。多练几次,把流程刻进肌肉记忆,才能真正守住数据安全这道防线。


