4.8.2. 设置 WAL 归档
您可以在 PostgreSQL 服务器上启用写前日志(WAL)归档,以捕获并保存 WAL 段文件用于备份和恢复目的。
正在运行的 PostgreSQL 服务器生成一组 WAL 记录。服务器物理上将该序列分成 WAL 段文件,这些文件被指定了数字名称,以反映它们在 WAL 序列中的位置。如果不进行 WAL 归档,段文件将被重新使用,并被重命名为更高的段号。
在归档 WAL 数据时,在重用段文件之前,都会捕获每一个段文件的内容,并将其保存在一个新的位置。您有多个保存内容的选项,例如其他机器上的 NFS 挂载目录、磁带驱动器或 CD。
请注意,WAL 记录不包括对配置文件的修改。
流程
在
/var/lib/pgsql/data/postgresql.conf文件中:-
将
wal_level配置参数设置为replica或更高的值。 -
将
archive_mode参数设置为on。 在
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参数强制段切换,以确保交易在完成后立即归档。
-
设置
-
将
重启
postgresql服务以使修改生效:# systemctl restart postgresql.service- 测试您的归档命令,并确保它不会覆盖现有文件,如果失败了,它将返回一个非零退出状态。
- 要保护您的数据,请确保将段文件归档到不具有组或全局读权限的目录中。