首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从运行PostgreSQL实例中“恢复”数据;数据目录被删除

从运行PostgreSQL实例中“恢复”数据;数据目录被删除
EN

Database Administration用户
提问于 2014-06-13 21:49:13
回答 1查看 1.4K关注 0票数 1

我意外地从运行postgresql服务器时删除了数据目录/var/lib/pgsql/9.1/data

当服务器重新启动时,我想我会丢失我的数据。

我想知道postgresql是否有从正在运行的服务器实例中恢复数据的工具,还是必须使用系统数据恢复工具?

EN

回答 1

Database Administration用户

发布于 2014-06-14 00:10:42

恐怕你的机会在无穷小和零之间。

该目录中有很多文件,而它是子目录。在删除目录时由postgresql后端进程之一实际打开的任何文件系统都仍然存在,但也没有关闭。因此,您所希望的最好的方法是恢复一些文件,而数据库不太可能在丢失的文件中正常启动。

假设一个Linux系统,您可以使用以下命令查看哪些文件实际上是打开的(因此理论上至少仍然可以恢复):

代码语言:javascript
运行
复制
lsof -u postgres | grep /var/lib/pgsql

您将看到这样的条目:

代码语言:javascript
运行
复制
postmaste 2418 postgres 5u REG  253,0 8192 274804 /var/lib/pgsql/9.2/data/global/5445770

第二列是进程的PID,第四列的数字部分是FD (文件描述符)号。可以使用以下命令恢复该文件:

代码语言:javascript
运行
复制
cp /proc/{PID}/fd/{FD} {dest_file}

酌情替换{PID}、{FD}和{dest_file}。

但是,正如我所说的,您恢复所有丢失的文件,甚至足够之后能够重新启动数据库的机会非常渺茫。即使是你恢复的进程也可能被破坏,因为打开它们的另一个进程将同时写信给他们。

相反,尝试pg_dump可能是值得的。可能无法转储整个数据库,但如果幸运的话,您可能会以这种方式恢复其中的一些。如果有些表对您来说比其他表更重要,而且运行中的数据库似乎仍然能够访问这些表,那么您可以尝试使用pg_dump只转储这些表。

您可以使用系统文件恢复工具恢复底层文件(但我会说非常不可能)。

票数 6
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/68248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档