格兰特·弗里奇:支持时间点恢复的PostgreSQL备份:与格兰特一起学习PostgreSQL

格兰特·弗里奇:支持时间点恢复的PostgreSQL备份:与格兰特一起学习PostgreSQL

💡 原文英文,约2200词,阅读约需8分钟。
📝

内容提要

本文讨论了通过点时间恢复来保护PostgreSQL数据库的方法,介绍了连续归档和基本备份的概念,并提供了相应的配置和命令。最后,详细说明了点时间恢复的步骤。

🔎

延伸解读

备份策略的核心是恢复

文章强调,备份策略的焦点不应是备份本身,而是恢复数据库。仅仅拥有备份是不够的,如果无法从备份中恢复数据,备份就毫无意义。此外,能够将数据库恢复到特定时间点(而不仅仅是最近一次完整备份)需要采用不同的备份方法。这要求我们改变备份方式,并提前规划和练习恢复流程。

连续归档与WAL的作用

PostgreSQL通过预写日志(WAL)实现时间点恢复。WAL记录所有修改数据或结构的操作,类似于SQL Server的数据库日志。默认情况下,WAL以16MB的滚动文件形式保存。为了支持时间点恢复,必须设置WAL归档,将填满的WAL文件复制到第二个位置。这需要配置wal_level为replica或logical,并设置archive_mode为on,以及定义archive_command来移动文件。

基础备份与恢复步骤

使用pg_basebackup工具可以备份所有数据库,确保恢复时的完整性。该工具自动将服务器置于备份模式,复制所有数据库文件,并记录备份标签文件,其中包含WAL文件的起止点。恢复时,需要停止服务器,清理数据目录(但保留pg_wal目录),恢复基础备份文件,修改postgresql.conf中的restore_command,并创建recovery.conf文件指定恢复目标时间。恢复完成后,recovery.conf会被重命名为recovery.done,防止重复恢复。

恢复过程中的注意事项

文章建议提前准备恢复脚本并多次练习,以应对紧急情况。恢复前,运行pg_switch_wal以关闭当前WAL文件并归档。如果无法连接服务器,可能会丢失最后的WAL文件(尾日志),但可以尝试从pg_wal目录手动复制。恢复时,需要清理旧的pg_wal目录,并确保数据目录的所有权和权限正确。修改postgresql.conf时,注意取消restore_command的注释并设置正确路径,同时指定recovery_target_time。

❓

Q&A

PostgreSQL的点时间恢复是什么?

点时间恢复是指将数据库恢复到特定的时间点,而不仅仅是最后一次完整备份的状态。

如何配置PostgreSQL进行WAL归档?

需要修改postgresql.conf文件,设置archive_mode为on,并配置archive_command以指定WAL文件的存储位置。

使用pg_basebackup备份数据库的基本步骤是什么?

使用命令pg_basebackup -D dbarchive可以备份所有数据库,并自动将服务器置于备份模式。

在恢复过程中需要注意哪些步骤?

需要运行pg_switch_wal,停止服务器,清理pg_wal目录,修改postgresql.conf文件,并创建recovery.conf文件。

WAL在PostgreSQL中有什么作用?

WAL(预写日志)记录所有修改数据的操作,支持点时间恢复和数据完整性。

点时间恢复的准备工作有哪些?

需要定期运行pg_basebackup进行备份,并设置WAL的连续归档,以确保可以恢复到特定时间。

🏷️

标签

➡️

继续阅读