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 怎么通过命令来恢复删除的数据_第1张图片

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 怎么通过命令来恢复删除的数据_第2张图片

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

pg_waldump 00000002000000010000001F 000000020000000100000025 -s 1/7C030CF8

PostgreSQL 怎么通过命令来恢复删除的数据_第3张图片

或者通过

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

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

PostgreSQL 怎么通过命令来恢复删除的数据_第4张图片

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

pg_resetwal -x 464902 -D /pgdata/data/

PostgreSQL 怎么通过命令来恢复删除的数据_第5张图片

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

PostgreSQL 怎么通过命令来恢复删除的数据_第6张图片

经过确认数据已经恢复

但这里需要注意几点 

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

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

操作之前的日志

97456453aa5fd45c1cdddc9c4f541fd6.png

操作后的日志

PostgreSQL 怎么通过命令来恢复删除的数据_第7张图片

你可能感兴趣的:(数据库,python,java,mysql,linux)