4.8.2. 设置 WAL 归档


您可以在 PostgreSQL 服务器上启用写前日志(WAL)归档,以捕获并保存 WAL 段文件用于备份和恢复目的。

正在运行的 PostgreSQL 服务器生成一组 WAL 记录。服务器物理上将该序列分成 WAL 段文件,这些文件被指定了数字名称,以反映它们在 WAL 序列中的位置。如果不进行 WAL 归档,段文件将被重新使用,并被重命名为更高的段号。

在归档 WAL 数据时,在重用段文件之前,都会捕获每一个段文件的内容,并将其保存在一个新的位置。您有多个保存内容的选项,例如其他机器上的 NFS 挂载目录、磁带驱动器或 CD。

请注意,WAL 记录不包括对配置文件的修改。

流程

  1. /var/lib/pgsql/data/postgresql.conf 文件中:

    1. wal_level 配置参数设置为 replica 或更高的值。
    2. archive_mode 参数设置为 on
    3. archive_command 配置参数中指定 shell 命令。您可以使用 cp 命令、其它命令或 shell 脚本。

      例如:

      archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'

      其中 %p 参数替换为归档文件的相对路径,%f 参数替换为文件名。

      此命令将可归档的 WAL 段复制到 /mnt/server/archivedir/ 目录中。替换 %p%f 参数后,执行的命令如下所示:

      test ! -f /mnt/server/archivedir/00000001000000A900000065 && cp pg_wal/00000001000000A900000065 /mnt/server/archivedir/00000001000000A900000065

      对每个归档的新文件都会生成类似的命令。

      注意

      归档命令只对已完成的 WAL 段执行。生成小 WAL 流量的服务器在交易完成和其归档存储中的安全记录之间可能会有很长时间的延迟。要限制未归档数据可保留多久,您可以:

      • 设置 archive_timeout 参数,来强制服务器以给定频率切换到新的 WAL 段文件。
      • 使用 pg_switch_wal 参数强制段切换,以确保交易在完成后立即归档。
  2. 重启 postgresql 服务以使修改生效:

    # systemctl restart postgresql.service
  3. 测试您的归档命令,并确保它不会覆盖现有文件,如果失败了,它将返回一个非零退出状态。
  4. 要保护您的数据,请确保将段文件归档到不具有组或全局读权限的目录中。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部