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();
到此说明恢复结束