PostgreSQL 在WAL文件中查找drop table、update、delete操作
配套视频
要还原数据前必须查找对应的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操作相关推荐
- excel 外部链接 乱码_在Excel文件中查找外部链接
excel 外部链接 乱码 Last week, I opened an Excel file, and was surprised to see a Security Warning. Appare ...
- 在文件中查找指定字符串
1. 在指定文件中查看指定字符串的行数 cat file_name | grep -n "String" 2. 在多个文件中查找指定字符串 在多个指定文件中查找指定字符串,命令如下 ...
- 在目录下所有文件中查找字符串
目录下的所有文件中查找字符串 find .| xargs grep -ri "class" 目录下的所有文件中查找字符串,并且只打印出含有该字符串的文件名 find .| xarg ...
- Windows dos 在某个目录下的所有文件中查找包含某个字符串的文件
findstr /s /i "str" *.* 上面的命令表示,当前目录以及当前目录的所有子目录下的所有文件中查找"str"这个字符串.*.*表示所有类型的文件 ...
- 在linux中的文件中查找_如何在Linux中查找文件
在linux中的文件中查找 如果您是Windows用户或OSX的非超级用户,则可能使用GUI查找文件. 您可能还会发现界面有限,令人沮丧或两者兼而有之,并且学会了精于组织事物并记住文件的确切顺序. 您 ...
- idea在java文件中查找_Java开发工具IntelliJ IDEA使用源代码系列教程(四):在文件中搜索目标...
IntelliJ IDEA是Java语言开发的集成环境,IntelliJ在业界被公认为优秀的Java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUnit.CVS整合. ...
- C++从文件中查找特定的字符串,并提取该字符串
记录一个小技巧,使用C++从文件中查找特定标记的字符串,并提取该字符串. 用到了CString的方法,十分的简单,用于数据分析很方便. 这是我截取的压缩编码试验程序中的代码,通过这段代码可以提取X26 ...
- 超大文件中查找关键字
一个有10亿条记录的文本文件,已按照关键字排好序存储.请设计算法,可以快速的从文件中查找指字关键字的记录. 因为已经排好序了,可以使用 二分查找方法检索. 又因为文件过于庞大,可以将文件File分成1 ...
- idea中ctrl+shift+f(在文件中查找)失效,全图文解决方案
idea中ctrl+shift+f(在文件中查找)失效,全图文解决方案 一.Win11微软键盘 原因:因为输入法默认指定ctrl+shift+f是简体与繁体中文输入之间的切换,所以在idea中按键无效 ...
最新文章
- 在.NET环境下将报表导出Excel和Word
- 一个显示器分两个屏幕_桌面改造计划2.0:一个显示器不够那就两个,桌面好物分享...
- GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询
- 由浅入深,逐步了解 Java 并发编程中的 Synchronized!
- Minimum Window Substring @LeetCode
- 支持多浏览器的js拖拽 (转domkey0303 的blog)
- NB-IoT未来发展,主要是靠什么驱动的?
- 单片机中断程序详解(转)
- 阿里云服务器可以搭建游戏吗?
- Sentinel-1 GRD数据处理及其在水体信息提取中的应用
- python的most_common()函数
- JWT令牌生成与校验
- 新款 2018款macbook Pro 装双系统教程
- TFN TT70网络综合分析仪性能如何
- python案例——数学问题案例
- [PHP] 2018年终总结
- java 比较当前时间_java时间比较
- linux怎么生成图形,如何在Ubuntu 16.04中创建GIF动态图片
- 广东开放大学成本会计
- 觉得还不错的国内外编程技术网站、论坛列表