4.8.4. 使用持续归档备份恢复数据库
您可以通过恢复基础备份并应用归档的 WAL 文件来恢复 PostgreSQL 数据库。
流程
停止服务器:
# systemctl stop postgresql.service将必要的数据复制到临时位置。
最好复制整个集群数据目录和任何表空间。请注意,这需要系统上有足够的可用空间来保存现有数据库的两个副本。
如果您没有足够的空间,就保存集群的
pg_wal目录的内容,其中可能包含系统关闭前没有归档的日志。- 删除集群数据目录下的所有现有文件和子目录,并在您要使用的任何表空间的根目录下删除。
从您的基础备份恢复数据库文件。
确保:
-
恢复的文件具有正确的所有权(数据库系统用户,而不是
root)。 - 恢复的文件具有正确的权限。
-
pg_tblspc/子目录中的符号链接被正确恢复。
-
恢复的文件具有正确的所有权(数据库系统用户,而不是
删除
pg_wal/子目录中的任何文件。这些文件源自基础备份,因此已过时。如果您没有归档
pg_wal/,请重新创建它,并使其具有正确的权限。-
将你在步骤 2 中保存的任何未归档的 WAL 段文件复制到
pg_wal/中。 在集群数据目录中创建
restore.conf恢复命令文件,并在restore_command配置参数中指定 shell 命令。您可以使用cp命令、其它命令或 shell 脚本。例如:restore_command = 'cp /mnt/server/archivedir/%f "%p"'启动服务器:
# systemctl start postgresql.service服务器进入恢复模式,并继续读取所需的存档 WAL 文件。
如果恢复因为外部错误而终止,那么可以重启服务器,它将继续进行恢复。恢复过程完成后,服务器将
restore.conf重命名为restore.done。这可防止服务器在正常数据库操作后意外重新进入恢复模式。检查数据库的内容,确保数据库已恢复到所需的状态。
如果数据库尚未恢复到所需状态,请返回到第 1 步。如果数据库已恢复到所需的状态,那么通过恢复
pg_hba.conf文件中的客户端身份验证配置来允许用户进行连接。