可用工具
pg_recovery 使用简单,默认只有待找回数据;
pg_dirtyread 使用简单,默认返回全部数据;
WalMiner 需要对 walminer 全面掌握,并做好系统预设;
pg_resetwal 需要了解的内容较多;
pg_filedump 需要单独写一些脚本或工具来配合使用;
pageinspect 难度极大。
若无任何准备,如何恢复数据?推荐以下方法:
及时设置 vacuum_defer_cleanup_age
安装 pg_recover 或者 pg_dirtyread
无法安装插件可以采用 pg_resetwal ,无需任何额外工具

上科技与狠活
pg_resetwal 通过设置事务号的方式来恢复数据,因此必须提前获取待恢复数据的事务号。create table deltest(id int);insert into deltest values(1);insert into deltest values(1);insert into deltest values(1);insert into deltest values(1);insert into deltest values(1);select * from deltest;delete from deltest;select * from deltest;1.查看当前 lsn 位置select pg_current_wal_lsn();pg_controldata | grep 'checkpoint location'通过查询来确定 lsn 的大致的位置。2. 获取事务号pg_waldump -b -s 0/7A42BE8rmgr: Heap len (rec/tot): 59/ 299, tx: 595, lsn: 0/030001B8, prev 0/03000180, desc: DELETE off 5 KEYS_UPDATED , blkref #0: rel 1663/16392/16393 blk 0 FPWrmgr: Heap len (rec/tot): 54/ 54, tx: 595, lsn: 0/030002E8, prev 0/030001B8, desc: DELETE off 6 KEYS_UPDATED , blkref #0: rel 1663/16392/16393 blk 0rmgr: Transaction len (rec/tot): 34/ 34, tx: 595, lsn: 0/03000320, prev 0/030002E8, desc: COMMIT 2019-03-26 11:00:23。410557 CST3. 设置事务号-- 关闭数据pg_ctl -m f stoppg_resetwal -f opt/pg_root -x 521pg_ctl start-- 启动数据库4. 查看所需数据select * from deltest
参考资料
http://postgres.cn/docs/14/app-pgresetwal.html
文章转载自CP的PostgreSQL厨房,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




