我在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 .
sudo service postgresql stop 10
tar xvf /var/lib/pgsql/backups/pg_basebackup_backup.tar.gz -C /var/lib/pgsql/data
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恢复条目,我删除的两行没有恢复。
答案 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
。