postgresql 日志传送似乎不起作用

postgresql 日志传送似乎不起作用

有两台服务器。一台是现场数据库服务器;另一台是异地备份服务器。由于现场数据库服务器已经包含近 900G 的数据,因此备份非常重要。最初,我们使用每日备份pg_dumpall,但出于性能原因,这不再是一种选择。

由于数据库服务器即将升级,包括 postgresql 本身的升级(从 postgresql 9.1 升级到 9.4),我决定尝试将 WAL 传输转移到异地服务器,以便备份可以正常工作。以下是我目前所做的:

  • 在新服务器上创建新集群
  • 停止新服务器上的数据库服务器,将数据目录 rsync 到异地服务器(这样我就有一个基础备份)
  • 在新服务器上配置 postgresql.conf,使其wal_level设置为hot_standby、和。archive_modeonarchive_commandtest ! -f /srv/pg_wal/%f && cp %p /srv/pg_wal/%f
  • 在新服务器上启动集群
  • ssh oldserver pg_dumpall | psql读取数据,生成大量 WAL 段
  • 通过较慢的链接(速度介于 1 到 6Mbit 之间,具体取决于一天中的时间)将 WAL 段复制到异地服务器。这需要几天时间
  • restore.conf在异地服务器的数据目录中创建包含restore_command = 'cp /srv/pg_wal/%f "%p"'standby_mode = on
  • 在异地服务器上启动 postgresql
  • 意识到它应该是recovery.conf,所以再次停止服务器并将文件移动到正确的名称。

不幸的是,它似乎不起作用。当我现在查看日志文件时,我看到以下内容:

2016-07-25 12:30:59 CEST [137390-71] LOG:  record with zero length at 0/2000200
2016-07-25 12:31:04 CEST [137390-72] LOG:  restored log file "000000010000000000000002" from archive
2016-07-25 12:31:04 CEST [137390-73] LOG:  record with zero length at 0/2000200
2016-07-25 12:31:09 CEST [137390-74] LOG:  restored log file "000000010000000000000002" from archive

这种情况一再重复。

检查pg_xlog异地服务器上的目录发现有两个文件:一个是000000010000000000000002,其校验和与 中的同名文件相同/srv/pg_wal;另一个是 ...03,但校验和不同。

我的/srv/pg_wal包含所有 WAL 段,也包括000000010000000000000001(原始数据库服务器创建的第一个段)。但是,我似乎无法将它们加载到异地服务器中。

问题:在给定的情况下,我能否以某种方式让异地服务器仍然接受这些 WAL 日志?如果可以,我该怎么做?

从技术上讲,我可以创建一个新的基础备份并将其复制到新服务器,但由于现在服务器上已经有大量数据,并且两个站点之间的带宽较低,如果可以避免的话,我宁愿不这样做。

相关内容