1、备份数据目录

在本地复制PGSQL数据库数据目录

cp -Rp pgsql pgbakup

压缩备份的数据库目录

zip -r pgbakup.zip pgbakup/

2、部署新的pgsql

下载pgsql

下载地址:https://ftp.postgresql.org/pub/source/v15.12/postgresql-15.12.tar.gz

安装就先不说了。

3、将备份文件放在新部署的pgsql数据目录中

4、启动新PGSQL
/usr/local/pgsql/bin/postgres -D /data/p_backup

5、安装pg_filedump数据恢复插件

下载地址:https://codeload.github.com/df7cb/pg_filedump/zip/refs/tags/REL_17_4

进入安装目录

cd /data/install-page

解压pg_filedump-REL_17_4.zip

进入pg_filedump-REL_17_4目录进行安装

编译安装,#PG_CONFIG=/usr/local/pgsql/bin/pg_config为pg_config绝对路径

make PG_CONFIG=/usr/local/pgsql/bin/pg_config    
      
make install PG_CONFIG=/usr/local/pgsql/bin/pg_config  

安装完成后在/usr/local/pgsql/bin/目录下有pg_filedump命令

6、定位被误删表door_history_record物理存储文件路径
select pg_relation_filepath('door_history_record');

会输出/base/16388/16389,base:默认表空间目录,16388:数据库的OID,16389:关系的filenode号

7、查看通过dump出来door_history_record表中数据

显示格式化的块内容转储以及解释

./pg_filedump -f /data/pgsql/base/16388/16389

显示已解释的项目详细信息

./pg_filedump -i /data/pgsql/base/16388/16389

按字段类型显示解析的被删除数据

./pg_filedump -D varchar,varchar,varchar,varchar,int,timestamp,varchar,varchar /data/pgsql/base/16388/16389

#varchar,varchar,varchar,varchar,int,timestamp,varchar,varchar表里所有字段的类型,按前后顺序写。

8、过滤数据,并恢复
./pg_filedump -D varchar,varchar,varchar,varchar,int,timestamp,varchar,varchar /data/pgsql/base/16388/16389 | grep COPY |awk '{$1=null;print $0}'|sed 's/^[ ]*//g'

将丢失数据转存至txt文本文件中。

./pg_filedump -D varchar,varchar,varchar,varchar,int,timestamp,varchar,varchar /data/pgsql/base/16388/16389 | grep COPY |awk '{$1=null;print $0}'|sed 's/^[ ]*//g'> /home/postgres/t.txt

将文本文件数据导入pgsql

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐