我试图修改postgresql.conf (PostgreSQL10.0下的Ubuntu18.04VPS),以设置写在前面的日志(WAL)。
AIUI,这些命令应该是:
wal_level = replica # minimal, replica, or logical
archive_mode = on # enables archiving; off, on, or always
# (change requires restart)
archive_command = 'cp %p /var/lib/postgresql/10/main/pg_wal/%f'
archive_timeout = 600 # force a logfile segment switch after this
# number of seconds; 0 disables
AIUI,%p引用数据库文件(要存档),%f引用包含所述数据库文件副本的文件名。
在本例中:我是说每5分钟将数据库文件复制到/pg_wal目录。
但是,这显然是不正确的,因为错误日志文件显示:
cp: 'pg_wal/000000010000000000000002' and '/var/lib/postgresql/10/main/pg_wal/000000010000000000000002' are the same file
2020-02-16 21:01:05.857 UTC [20707] LOG: archive command failed with exit code 1
2020-02-16 21:01:05.857 UTC [20707] DETAIL: The failed archive command was: cp pg_wal/000000010000000000000002 /var/lib/postgresql/10/main/pg_wal/000000010000000000000002
所以我不确定%p和/或%f应该如何使用。如果有人能给我介绍一下语法,我将非常感激。
发布于 2020-02-17 07:41:40
您需要将WAL段复制到其他地方,而不是复制到它原来的位置。
这个上下文中的“其他地方”意味着不同物理机器上的不同存储。因此,如果目标是NFS挂载或类似的,那么cp
只是一种很好的归档方法。否则,scp
会更好。
您必须尽可能确保原始数据库遇到的任何问题都不会影响WAL档案。
测试cp
是否会覆盖任何内容也是一个好主意,就像文档中的示例一样。否则,如果两个集群由于错误地将文件归档到同一个目录,则可能会导致数据丢失。
https://dba.stackexchange.com/questions/259811
复制相似问题