我意外地从运行postgresql服务器时删除了数据目录/var/lib/pgsql/9.1/data。
当服务器重新启动时,我想我会丢失我的数据。
我想知道postgresql是否有从正在运行的服务器实例中恢复数据的工具,还是必须使用系统数据恢复工具?
发布于 2014-06-14 00:10:42
恐怕你的机会在无穷小和零之间。
该目录中有很多文件,而它是子目录。在删除目录时由postgresql后端进程之一实际打开的任何文件系统都仍然存在,但也没有关闭。因此,您所希望的最好的方法是恢复一些文件,而数据库不太可能在丢失的文件中正常启动。
假设一个Linux系统,您可以使用以下命令查看哪些文件实际上是打开的(因此理论上至少仍然可以恢复):
lsof -u postgres | grep /var/lib/pgsql您将看到这样的条目:
postmaste 2418 postgres 5u REG 253,0 8192 274804 /var/lib/pgsql/9.2/data/global/5445770第二列是进程的PID,第四列的数字部分是FD (文件描述符)号。可以使用以下命令恢复该文件:
cp /proc/{PID}/fd/{FD} {dest_file}酌情替换{PID}、{FD}和{dest_file}。
但是,正如我所说的,您恢复所有丢失的文件,甚至足够之后能够重新启动数据库的机会非常渺茫。即使是你恢复的进程也可能被破坏,因为打开它们的另一个进程将同时写信给他们。
相反,尝试pg_dump可能是值得的。可能无法转储整个数据库,但如果幸运的话,您可能会以这种方式恢复其中的一些。如果有些表对您来说比其他表更重要,而且运行中的数据库似乎仍然能够访问这些表,那么您可以尝试使用pg_dump只转储这些表。
您可以使用系统文件恢复工具恢复底层文件(但我会说非常不可能)。
https://dba.stackexchange.com/questions/68248
复制相似问题