Menu Close

4.5.3.5. 使用持续归档备份来恢复数据库

要使用持续备份来恢复数据库,请使用以下流程:

流程

  1. 停止服务器:

    # systemctl stop postgresql.service
  2. 将必要的数据复制到临时位置。

    最好复制整个集群数据目录和任何表空间。请注意,这需要系统上有足够的可用空间来保存现有数据库的两个副本。

    如果您没有足够的空间,就保存集群的pg_wal 目录的内容,其中可能包含系统关闭前没有归档的日志。

  3. 删除集群数据目录下的所有现有文件和子目录,并在您要使用的任何表空间的根目录下删除。
  4. 从您的基础备份恢复数据库文件。

    请确定:

    • 恢复的文件具有正确的所有权(数据库系统用户,而不是 root)。
    • 恢复的文件具有正确的权限。
    • pg_tblspc/ 子目录中的符号链接被正确恢复。
  5. 删除 pg_wal/ 子目录中的任何文件。

    这些文件源自基础备份,因此已过时。如果您没有归档 pg_wal/,请重新创建它,并使其具有正确的权限。

  6. 将你在步骤 2 中保存的任何未归档的 WAL 段文件复制到 pg_wal/ 中。
  7. 在集群数据目录中创建 restore.conf 恢复命令文件,并在 restore_command 配置参数中指定 shell 命令。您可以使用 cp 命令、其它命令或 shell 脚本。例如:

    restore_command = 'cp /mnt/server/archivedir/%f "%p"'
  8. 启动服务器:

    # systemctl start postgresql.service

    服务器将进入恢复模式,并继续读取所需的存档 WAL 文件。

    如果恢复因为外部错误而终止,那么可以重启服务器,它将继续进行恢复。恢复过程完成后,服务器将 restore.conf 重命名为 restore.done。这可以防止服务器在启动正常的数据库操作后意外重新进入恢复模式。

  9. 检查数据库的内容,确保数据库已恢复到所需的状态。

    如果数据库尚未恢复到所需状态,请返回到第 1 步。如果数据库已恢复到所需的状态,那么通过恢复 pg_hba.conf 文件中的客户端身份验证配置来允许用户进行连接。

有关使用持续备份恢复的更多信息,请参阅 PostgreSQL 文档