0

我在 postgres 配置文件中启用了 WAL 归档。当我重新启动 Postgres 服务时,WAL 恢复不起作用。日志中没有 wal 恢复条目。

我遵循的步骤:

Created directory for wal:
mkdir -p  /var/lib/pgsql/wals/
mkdir -p  /var/lib/pgsql/backups/
chown postgres:postgres -R /var/lib/pgsql/backups/
chown postgres:postgres -R /var/lib/pgsql/wals/

Edited the postgresql.conf with the below changes:
wal_level=archive
archive_mode=on
archive_command = 'test ! -f /var/lib/pgsql/wals/%f && cp %p /var/lib/pgsql/wals/%f'

sudo service postgresql restart 10
sudo su - postgres
pg_basebackup -D /var/lib/pgsql/data #created base backup
tar -C /var/lib/pgsql/data/ -czvf /var/lib/pgsql/backups/pg_basebackup_backup.tar.gz .

删除了我数据库中的两行数据并停止了postgres服务

sudo service postgresql stop 10

提取 Basebackup

tar xvf /var/lib/pgsql/backups/pg_basebackup_backup.tar.gz -C /var/lib/pgsql/data

使用以下内容创建了 recovery.conf 并重新启动了 postgres 服务

echo "restore_command = 'cp /var/lib/pgsql/wals/%f %p'">/var/lib/pgsql/recovery.conf
cp /var/lib/pgsql/recovery.conf /var/lib/pgsql/data/
sudo service postgresql stop 10
sudo service postgresql start 10

日志中没有 wal 恢复条目,我删除的两行没有恢复。

4

2 回答 2

1

pg_basebackup 可以在备份期间捕获所有 WAL 段。我使用带有“-X stream”选项的 tar 格式的 basebackup 并且一切正常。见这里 - pg_basebackup - 用于在 Google 存储上备份和归档的 bash 脚本 它运行良好 - 我备份了 4.5+ TB 大的数据库,这需要将近 2 天。

此处描述了恢复 - pg_basebackup / pg-barman – 恢复 tar 备份

一切正常 - 当我们不得不从这些备份中恢复时,我们已经发生了一些事件。

于 2018-02-22T11:56:29.993 回答
0

包含两个已删除行的 WAL 可能尚未归档。

archive_command每当 16 MB WAL 段已满或强制日志切换时运行。

为了能够恢复尚未归档的最新更改,您必须将 的内容复制到已恢复的基本备份中pg_wal的目录中。pg_wal

您也可以考虑流式复制,或者pg_receivewal如果您不能承受丢失事务。

于 2018-02-22T10:07:26.053 回答