我根据WAL存档的postgres文档对postgresql 9.4数据库进行了备份。
备份后,我在DB中创建了2条记录。
现在,当我尝试恢复数据库时,我上面创建的最后2条记录不会出现。
WAL归档步骤:
cd /etc/postgresql/9.4/
mkdir archives
mkdir backups
chown postgres:postgres archives
chown postgres:postgres backups
cd /etc/postgresql/9.4/main/
echo 'max_wal_senders=1' >> postgresql.conf
echo 'wal_level=hot_standby' >> postgresql.conf
echo 'archive_mode=on' >> postgresql.conf
echo "archive_command='test ! -f /etc/postgresql/9.4/archives/%f && cp %p /etc/postgresql/9.4/archives/%f'" >> postgresql.conf
echo 'local replication postgres trust' >> pg_hba.conf
service postgresql restart
备份步骤:
cd /etc/postgresql/9.4/backups
rm -rf *
pg_basebackup --xlog -U postgres --format=t -D /etc/postgresql/9.4/backups/
恢复步骤:
service postgresql stop
cd /var/lib/postgresql/9.4/
if [ ! -d "/var/lib/postgresql/9.4/tmp/" ]
then
mkdir tmp
else
rm -rf tmp
fi
mkdir tmp
mv /var/lib/postgresql/9.4/main/* /var/lib/postgresql/9.4/tmp/
cd /var/lib/postgresql/9.4/main/
rm -rf *
cd /etc/postgresql/9.4/backups
tar -xf base.tar -C /var/lib/postgresql/9.4/main/
cd /var/lib/postgresql/9.4/main/
FROMDIR="/etc/postgresql/9.4/archives/"
TODIR="/var/lib/postgresql/9.4/tmp/pg_xlog/"
if [ ! -d "$FROMDIR" ]
then
echo "Directory $FROMDIR does not exist!!"
exit
fi
if [ ! -d "$TODIR" ]
then
echo "Directory $TODIR does not exist!!"
exit
fi
cd $FROMDIR
for i in `find . -type f`
do
if [ ! -f $TODIR/$i ]
then
echo "copying file $i"
cp $i /var/lib/postgresql/9.4/main/pg_xlog/$i
fi
done
cd /var/lib/postgresql/9.4/main/pg_xlog/
chown -R postgres:postgres *
cd /var/lib/postgresql/9.4/main/
FILE="recovery.done"
if [ -f $FILE ]
then
mv $FILE recovery.conf
else
echo "restore_command = 'cp /etc/postgresql/9.4/archives/%f %p'" >> recovery.conf
fi
su postgres service postgresql start
exit
答案 0 :(得分:0)
当前WAL段(通常为16 Mb)被填满时,存档(/ case / etc / gretgresql / 9.4 / archives /)中会出现更改。我引用documentation:
仅对已完成的WAL段调用archive_command。因此, 如果您的服务器生成很少的WAL流量(或具有松弛周期 如果这样做的话,完成之间可能会有很长的延迟 事务及其在存档存储中的安全记录。要限制 可以将未归档的数据保存多久,您可以将archive_timeout设置为强制 服务器定期切换到新的WAL段文件。当这个 参数大于零,服务器将切换到新的 自上次经过这么多秒后的段文件 段文件切换,并且有任何数据库活动, 包括一个检查站。 (增加checkpoint_timeout会 减少空闲系统上不必要的检查点。)注意存档 由于强制切换而提前关闭的文件仍然相同 长度为完全完整的文件。因此,使用非常不明智 short archive_timeout - 它会使你的档案存储空白。
如果您只想测试恢复过程,可以在创建一些记录后强制切换到新的WAL段,然后执行select pg_switch_xlog();
。然后验证归档目录中是否出现了新文件。
此外,您无需将文件从存档目录复制到pg_xlog /。 Restore_command
将为您完成。