数据库

PostgreSQL备份还原专题

2022-11-14  本文已影响0人  这货不是王马勺

需要备份数据、归档日志。

备份方式

逻辑备份工具
一般用于迁移
pg_dump
pg_dumpall
物理备份工具
pg_basebackup

逻辑导入导出

导出:

pg_dump -d dbname > /tmp/dbname.sql

导入:
先建库,再执行

psql </tmp/dbname.sql

pg_basebackup物理备份

类似xbk热备的功能;
备份时先把脏页刷到磁盘上,然后备份数据,然后把归档日志也备走;

备份:

pg_basebackup -D /pgdata/pg_backup/ -Ft -Pv -Upostgres -h 10.10.0.51 -p 5432 -R

恢复:
将数据和归档日志分别解压到对应目录

tar xf base.tar -C /pgdata/12/data/
tar xf pg_wal.tar -C /archive/

修改配置文件postgresql.auto.conf(10版本之前好像叫recovery.conf)

vim postgresql.auto.conf

restore_command = 'cp /archive/%f %p'
recovery_target = 'immediate'

暂时不做主从可以把primary那行注释掉。

新建如下文件:

touch /pgdata/12/data/recovery.signal

会将恢复过程记录进来;没有这个文件其实也没关系。

场景模拟

每天23:00 PBK备份,下午14:00误删除数据,如何恢复?
思路:
1.恢复全被数据 tar xf -c ...
2.日志恢复:备份归档 + 23:00-14:00区间的归档恢复 + 在线redo日志

通过pg_waldump查看在线日志事务编号或者lsn或者时间点,然后不用target,改为
recovery_target_xid = '498'

此时pgsql进入发现仍是只读模式,需要执行

select pg_wal_replay_resume();

到此说明恢复结束

上一篇下一篇

猜你喜欢

热点阅读