十月 24, 2023
摘要:在本教程中,您将学习如何在 PostgreSQL 中启用 WAL 归档。
目录
介绍
归档是将历史信息存储在安全位置以供恢复的概念。同样,在数据库技术中,我们看到事务日志(PostgreSQL 中的 WAL)被归档到远程的备份服务器或云存储,以便在灾难期间恢复数据库。由于 WAL 段在达到一定阈值后会被回收,因此,在它们从服务器上消失之前,将它们归档到安全存储中非常重要。这也有助于时间点恢复(PITR),另外,在备用数据库落后于主数据库,并且需要最近删除的 WAL 段恢复同步的情况下,也很有帮助。在本教程中,我们将了解在 PostgreSQL 中启用归档所涉及的步骤。
准备工作
在 PostgreSQL 中,默认情况下不会启用归档。要启用归档,需要重新启动 PostgreSQL 实例。因此,我们需要确保在生产环境的 PostgreSQL 服务器上线之前启用归档。另外,我们还必须确保选择一个冗余且容灾安全的存储,来存储 WAL 日志归档。
操作步骤
请按照以下步骤,完成本教程:
1. 通过运行以下命令,验证 archive_mode:
$ psql -c "show archive_mode"
2. 使用ALTER SYSTEM
命令,设置archive_mode
为ON
,启用归档:
$ psql -c "ALTER SYSTEM SET archive_mode TO 'ON'"
3. 通过运行以下命令重新启动 PostgreSQL:
$ pg_ctl -D $PGDATA restart -mf
4. 创建归档位置,并将所有权赋予给postgres
:
$ mkdir -p /backups/archive
$ chown postgres:postgres /backups/archive
5. 使用适当的 shell 命令或脚本设置 archive_command,将 WAL 归档复制到安全位置。创建归档位置,并将所有权赋予给postgres
:
$ mkdir -p /backups/archive
$ psql -c "ALTER SYSTEM SET archive_command TO 'cp %p /backups/archive/%f'"
6. 运行reload
或SIGHUP
,以使对archive_command
参数所做的更改生效:
$ psql -c "select pg_reload_conf()"
怎么做到的…
要将 WAL 段归档到永久存储,可按照下列步骤操作:
- 将 archive_mode 参数设置为 ON(需要重新启动)。
- 将 archive_command 参数设置为,可以将 WAL 日志发送到归档位置的 shell 命令或脚本。
在设置归档到某个位置之前,我们必须验证archive_mode
是否设置为 ON,如步骤 1 所示。如果未设置为 ON,我们可以使用步骤 2 中所示的命令将其设置为 ON。因为更改archive_mode
需要重新启动,我们需要使用类似于步骤 3 中看到的命令,重新启动 PostgreSQL 实例。
要将 WAL 段复制到不同的位置进行归档,我们需要提供适当的 shell 命令,该命令可用于执行复制。在上面的设置中,我们尝试将 WAL 段安全地归档到挂载名为/backups
的 NAS 存储。因此,我可以让归档进程发出一个简单的复制命令,将 WAL 段复制到 NAS 存储的挂载点,如步骤 5 所示。
这里,%p => 指的是要归档的 WAL 段的路径,而 %f => 指的是 WAL 段的名称。这两个值会由 PostgreSQL 替换。
现在,为了使archive_command
更改生效,我们必须执行一次reload
或SIGHUP
,如步骤 5 所示。完成后,归档将生效。
还有更多…
例如,在使用前面提到的 shell 命令设置好archive_command
后,PostgreSQL 执行的用于归档一个 WAL 段的命令,可能如下所示:
cp pg_wal/00000001000000D2000000C9 /backups/archive/00000001000000D2000000C9
正如您所看到的,它将 WAL 段复制到 shell 命令中指定的位置。