配套视频

要还原数据前必须查找对应的wal文件中的lsn号,步骤如下:

  • 根据大致的操作时间先确认大至wal文件的范围.

  • 解析此范围内的wal文件然后输出至文本.

  • 在文本中根据特征中查找.如果未找到请扩大wal文件范围.

  • 找到lsn后就可以恢复数据了

1 相关操作的WAL特征

1.1 查找drop table的正则表达式

#WAL解析后删除表特征字符串:
#   表特征字符串: $PGDATA/pg_tblspc/spc_oid/PG_MAJORVER_CATVER/db_oid/relfilenode
#   例如:pg_tblspc/16387/PG_14_202107181/16389/18616
#       pg_tblspc:固定值
#       16387:表空间OID
#       PG_14_202107181: PG固定值, 14当前安装的pg主要版本号,202107181初始化数据库的时间pg_controldata-> Catalog version number输出
#       16389:数据库OID
#       18616:表OID
pg_tblspc/16387/PG\_[\d]{2}_[\d]{9}/16389/18616
#或者
pg_tblspc/16387/\w+/16389/18616

1.2 查找delete的正则表达式

#WAL解析后删除表中数据的特征字符串:
#   例如:rmgr: Heap        len (rec/tot):     54/    54, tx:        780, lsn: 0/CB000B38, prev 0/CB000B00, desc: DELETE off 30 flags 0x00 KEYS_UPDATED , blkref #0: rel 16387/16389/18634 blk 38820#0: rel 16387/16389/18634 blk 38820
#       16387:表空间OID
#       16389:数据库OID
#       18634:表OIDDELETE(.*)?16387/16389/18634

1.3 查找update的正则表达式

#WAL解析后修改表中数据的特征字符串:
#   例如:rmgr: Heap        len (rec/tot):     71/    71, tx:        758, lsn: 0/410000E8, prev 0/410000B0, desc: HOT_UPDATE off 110 xmax 758 flags 0x60 ; new off 121 xmax 0, blkref #0: rel 16387/16389/18634 blk 26279
#       16387:表空间OID
#       16389:数据库OID
#       18634:表OIDUPDATE(.*)?16387/16389/18634

2 获取drop table的lsn

#显示所有归档的WAL文件,注意查看日期
ls -la --time-style=long-iso /archive | egrep '[A-Za-z0-9]{24}$'#在指定的WAL范围(由ls日期来确定)和删除表特征查找lsn
rm -rf ~/wal_find_results.txt && \
pg_waldump -p /archive  000000010000000000000044 000000010000000000000065 > ~/wal_find_results.txt#使用"4.1 解析后的WAL特征"中的正则表达式搜索.
cat<~/wal_find_results.txt | grep -E 'pg_tblspc/16387/\w+/16389/18616'#得到结果lsn 0/3FFFA8A0,根据0/3FFFA8A0定位wal文件
ssh postgres@pgser01 "/usr/local/pgsql/bin/psql -h localhost -U test -d test -c \"select pg_walfile_name('0/63A653C0')\"";#解析WAL文件再次确认lsn
pg_waldump -p /archive  000000010000000000000063
#0/63A64F38

3 获取delete的lsn

#显示所有归档的WAL文件,注意查看日期
ls -la --time-style=long-iso /archive | egrep '[A-Za-z0-9]{24}$'#在指定的WAL范围(由ls日期来确定)和删除表特征查找lsn
rm -rf ~/wal_find_results.txt && \
pg_waldump -p /archive  000000010000000000000044 000000010000000000000065 > ~/wal_find_results.txt#使用"4.1 解析后的WAL特征"中的正则表达式搜索.
cat<~/wal_find_results.txt | grep -E 'DELETE(.*)?16387/16389/18634'#得到结果lsn 0/3FFFA8A0,根据0/3FFFA8A0定位wal文件
ssh postgres@pgser01 "/usr/local/pgsql/bin/psql -h localhost -U test -d test -c \"select pg_walfile_name('0/64000060')\"";#解析WAL文件再次确认lsn
pg_waldump -p /archive  000000010000000000000064
#0/64000028

4 获取update的lsn

#显示所有归档的WAL文件,注意查看日期
ls -la --time-style=long-iso /archive | egrep '[A-Za-z0-9]{24}$'#在指定的WAL范围(由ls日期来确定)和删除表特征查找lsn
rm -rf ~/wal_find_results.txt && \
pg_waldump -p /archive  000000010000000000000044 000000010000000000000065 > ~/wal_find_results.txt#使用"4.1 解析后的WAL特征"中的正则表达式搜索.
cat<~/wal_find_results.txt | grep -E 'UPDATE(.*)?16387/16389/18634'#得到结果lsn 0/3FFFA8A0,根据0/3FFFA8A0定位wal文件
ssh postgres@pgser01 "/usr/local/pgsql/bin/psql -h localhost -U test -d test -c \"select pg_walfile_name('0/650000E8')\"";#解析WAL文件再次确认lsn
pg_waldump -p /archive  000000010000000000000065
#0/650000B0

5 其它

wal最多保存一年,也就是相关的历史数据最多保存一年.一年前的数据将无法恢复.可以用shell调用pg_archivecleanup实现

PostgreSQL 在WAL文件中查找drop table、update、delete操作相关推荐

  1. excel 外部链接 乱码_在Excel文件中查找外部链接

    excel 外部链接 乱码 Last week, I opened an Excel file, and was surprised to see a Security Warning. Appare ...

  2. 在文件中查找指定字符串

    1. 在指定文件中查看指定字符串的行数 cat file_name | grep -n "String" 2. 在多个文件中查找指定字符串 在多个指定文件中查找指定字符串,命令如下 ...

  3. 在目录下所有文件中查找字符串

    目录下的所有文件中查找字符串 find .| xargs grep -ri "class" 目录下的所有文件中查找字符串,并且只打印出含有该字符串的文件名 find .| xarg ...

  4. Windows dos 在某个目录下的所有文件中查找包含某个字符串的文件

    findstr /s /i "str" *.* 上面的命令表示,当前目录以及当前目录的所有子目录下的所有文件中查找"str"这个字符串.*.*表示所有类型的文件 ...

  5. 在linux中的文件中查找_如何在Linux中查找文件

    在linux中的文件中查找 如果您是Windows用户或OSX的非超级用户,则可能使用GUI查找文件. 您可能还会发现界面有限,令人沮丧或两者兼而有之,并且学会了精于组织事物并记住文件的确切顺序. 您 ...

  6. idea在java文件中查找_Java开发工具IntelliJ IDEA使用源代码系列教程(四):在文件中搜索目标...

    IntelliJ IDEA是Java语言开发的集成环境,IntelliJ在业界被公认为优秀的Java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合. ...

  7. C++从文件中查找特定的字符串,并提取该字符串

    记录一个小技巧,使用C++从文件中查找特定标记的字符串,并提取该字符串. 用到了CString的方法,十分的简单,用于数据分析很方便. 这是我截取的压缩编码试验程序中的代码,通过这段代码可以提取X26 ...

  8. 超大文件中查找关键字

    一个有10亿条记录的文本文件,已按照关键字排好序存储.请设计算法,可以快速的从文件中查找指字关键字的记录. 因为已经排好序了,可以使用 二分查找方法检索. 又因为文件过于庞大,可以将文件File分成1 ...

  9. idea中ctrl+shift+f(在文件中查找)失效,全图文解决方案

    idea中ctrl+shift+f(在文件中查找)失效,全图文解决方案 一.Win11微软键盘 原因:因为输入法默认指定ctrl+shift+f是简体与繁体中文输入之间的切换,所以在idea中按键无效 ...

最新文章

  1. 在.NET环境下将报表导出Excel和Word
  2. 一个显示器分两个屏幕_桌面改造计划2.0:一个显示器不够那就两个,桌面好物分享...
  3. GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询
  4. 由浅入深,逐步了解 Java 并发编程中的 Synchronized!
  5. Minimum Window Substring @LeetCode
  6. 支持多浏览器的js拖拽 (转domkey0303 的blog)
  7. NB-IoT未来发展,主要是靠什么驱动的?
  8. 单片机中断程序详解(转)
  9. 阿里云服务器可以搭建游戏吗?
  10. Sentinel-1 GRD数据处理及其在水体信息提取中的应用
  11. python的most_common()函数
  12. JWT令牌生成与校验
  13. 新款 2018款macbook Pro 装双系统教程
  14. TFN TT70网络综合分析仪性能如何
  15. python案例——数学问题案例
  16. [PHP] 2018年终总结
  17. java 比较当前时间_java时间比较
  18. linux怎么生成图形,如何在Ubuntu 16.04中创建GIF动态图片
  19. 广东开放大学成本会计
  20. 觉得还不错的国内外编程技术网站、论坛列表

热门文章

  1. oracle数据库查实例名,oracle查询数据库名、实例名等
  2. k线图技术分析中的一些要领
  3. GetDlgItem所获取CWnd*的时效性
  4. 查理·芒格《人类误判心理学》之检查清单
  5. 「内容创作者」路上的 3 重困境
  6. Android 第三方应用的打开
  7. 长城宽带使用遇到的问题
  8. “酒店装修,暂停营业”的真相
  9. 前端—HTML中常见标签的使用
  10. set ; get