Menu Close

4.5.3.3. 设置 WAL 归档

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

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

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

要启用 WAL 归档,请使用以下流程:

流程

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

    1. wal_level 配置参数设置为 replica 或更高的值。
    2. archive_mode 参数设置为 on
    3. archive_command 配置参数中指定 shell 命令。您可以使用 cp 命令、其它命令或 shell 脚本。
  2. 重启 postgresql 服务以使修改生效:

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

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

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

例 4.3. 用于归档 WAL 段的 shell 命令

本例显示了您可以在 archive_command 配置参数中设置的简单 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

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

其他资源