0
点赞
收藏
分享

微信扫一扫

PostgreSQL 怎么通过命令来恢复删除的数据

最近一段工作较忙,更新的速度可能会减慢,敬请见谅,后期采用隔天更新的方式


误删除数据的情况,一般都是通过备份,或日志来进行恢复,当然ORACLE FLASHBACK的模式实际上也是对一定期限的数据进行数据的恢复。 对于POSTGRESQL 是否可以进行这样的操作,根据POSTGRESQL 的原理来说是可以的。


下面我们就来操作一下瞬间恢复日志的方式


步骤

1  建立一个数据库

2  建立一个表

3  插入数据

4  删除数据

5  数据恢复


这里面我们主要用到的命令为 pg_waldump  pg_resetwal 

pg_waldump 命令就不多说了,前面有详细的一篇提到过,pg_waldump 的使用和日志的分析。


pg_resetwal 命令这边的好好的说一说, pg_resetwal 主要的工作的目的为为了在系统数据损坏的时候,通过pg_resetwal来重新标志日志的位置,让系统可以重启运行并且重置pg_control文件等等。


You are now connected to database "testn" as user "postgres".

testn=# 

testn=# 

testn=# create table deid (id int, name varchar(20));

CREATE TABLE

testn=# insert into deid (id,name) values (1,'t');

INSERT 0 1

testn=# insert into deid (id,name) values (2,'c');

INSERT 0 1

testn=# 

testn=# delete from deid where id =2 ;

DELETE 1

testn=# select * from deid;

 id | name 

----+------

  1 | t

(1 row)


PostgreSQL  怎么通过命令来恢复删除的数据_数据库



postgres=# \c testn

You are now connected to database "testn" as user "postgres".

testn=# 

testn=# 

testn=# create table deid (id int, name varchar(20));

CREATE TABLE

testn=# insert into deid (id,name) values (1,'t');

INSERT 0 1

testn=# insert into deid (id,name) values (2,'c');

INSERT 0 1

testn=# 

testn=# delete from deid where id =2 ;

DELETE 1

testn=# select * from deid;

 id | name 

----+------

  1 | t

(1 row)



上面我们删除了新插入的数据, 下面我们就通过上面的两个命令将数据还原到删除前的状态


1  步 确认当前的日志的以及LSN号

select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());


2  步根据得到当前的事务号以及日志文件,开始寻找恢复日志的数据范围

PostgreSQL  怎么通过命令来恢复删除的数据_数据库_02


3  在找到大约的 delete 前的位置,可以直接通过  LSN 号定位的方式

pg_waldump 00000002000000010000001F 000000020000000100000025 -s 1/7C030CF8

PostgreSQL  怎么通过命令来恢复删除的数据_数据_03


或者通过

pg_waldump 00000002000000010000001F 000000020000000100000025 -r transaction  |  grep  delete 的方式找到准确的删除数据的日志号。


4  在找到并确认事务号的情况下,关闭数据库服务

PostgreSQL  怎么通过命令来恢复删除的数据_删除数据_04


5   通过指定事务号的方式重置数据库

pg_resetwal -x 464902 -D /pgdata/data/

PostgreSQL  怎么通过命令来恢复删除的数据_数据_05


6  启动数据库并且查看数据是否恢复

PostgreSQL  怎么通过命令来恢复删除的数据_数据库_06

经过确认数据已经恢复


但这里需要注意几点 

1  在进行了操作后,设置的LSN 号后的数据都取消了,相当于回滚到指定的事务LSN 号的位置


2  WAL 日志整体被清理,原有的日志(单机)会被归并,原有的日志都没有了。

操作之前的日志

PostgreSQL  怎么通过命令来恢复删除的数据_数据_07

操作后的日志

PostgreSQL  怎么通过命令来恢复删除的数据_数据_08



举报

相关推荐

0 条评论