暂无图片
暂无图片
4
暂无图片
暂无图片
2
暂无图片

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

AustinDatabases 2021-09-24
4728

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

误删除数据的情况,一般都是通过备份,或日志来进行恢复,当然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)

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  步根据得到当前的事务号以及日志文件,开始寻找恢复日志的数据范围

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

pg_waldump 00000002000000010000001F 000000020000000100000025 -s 1/7C030CF8

或者通过

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

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

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

pg_resetwal -x 464902 -D pgdata/data/

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

经过确认数据已经恢复

但这里需要注意几点 

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

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

操作之前的日志

操作后的日志


文章转载自AustinDatabases,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

筱悦星辰
暂无图片
1年前
评论
暂无图片 0
生活是很公平的。在哪里付出,就在哪里得到;在哪里打磨,就在哪里闪耀。时光不负有心人,等你埋头走了很长的路,抬头时就可看见满天星辰。
1年前
暂无图片 点赞
评论
筱悦星辰
暂无图片
1年前
评论
暂无图片 0
渐行渐远的不是老家,而是童年的回忆, 是曾经满村的烟火气。
1年前
暂无图片 点赞
评论