postgres中的WAL归档不起作用

时间:2018-02-22 01:22:59

标签: postgresql wal

我在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恢复条目,我删除的两行没有恢复。

2 个答案:

答案 0 :(得分:1)

pg_basebackup可以在备份期间捕获所有WAL段。我使用" -X stream"将basebackup用于tar格式选项,一切顺利。见这里 - pg_basebackup – bash script for backup and archiving on Google storage 它工作得很好 - 我备份数据库4.5+ TB大,这需要将近2天。

此处描述了恢复 - pg_basebackup / pg-barman – restore tar backup

所有工作 - 当我们必须从这些备份恢复时,我们已经发生过事件。

答案 1 :(得分:0)

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

只要16 MB的WAL段已满或某些东西强制进行日志切换,

archive_command就会运行。

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

如果您无法承担丢失交易的费用,也可以考虑流式复制或pg_receivewal