2012-02-03 41 views
3

此问题与Postgresql 8.3有关。我还不能创建标签,所以我将8.4版作为标签。PG 8.3,磁盘已满,服务器无法启动

这是一个测试服务器,但我无法连接到它,因为经过一段时间的密集使用后,Postgres所在的磁盘已满。由于RDBMS无法启动,我无法做到真空。

在重新启动时,系统说,

Starting PostgreSQL 8.3 database server: mainThe PostgreSQL server failed to sta 
rt. Please check the log output: FATAL: could not write lock file "postmaster.pi 
d": No space left on device failed! 
failed! 

Linux中运行正常的,并具有足够的可用磁盘空间。 Postgresql在/ var/lib /上有自己的分区,并且具有零空闲字节。

我想我应该释放一些空间,然后才能重新启动数据库服务器,但我不知道要删除哪些文件。日志文件不在同一分区上,因此无法清空它们。有人可以帮助我吗?

回答

8

pg_log可以清除它是定期日志管理员 不要删除pg_xlogpg_clog目录,因为它们是数据库内部(对待他们,你会在基础数据文件)。即使您有空间,移除它们也会导致重新启动问题。

的过程中,我想尝试(以备份后)是:

找到/var/lib/pgsql树是相当大的下的一个目录,但不是那么大,它不能被复制到另一个文件系统。它不一定是整个base目录等,它可以是在那里的子目录。

将该目录的内容(包括任何子目录)复制到另一个文件系统。

删除旧目录,然后创建一个符号链接,其中旧目录位于新位置。

启动数据库和VACUUM FULL(或者现在你有权访问,或者如果你有一个数据库你可以不用,你可以直接删除一个数据库)。

关闭数据库。

删除符号链接,并将文件重新移回到var/lib文件系统。

事实上,你不能采取文件系统备份将使我有点不愿意在你的环境中做到这一点。

+0

这是值得一试的,如果我从Linux复制到Windows文件系统没有问题? – Leonard 2012-02-03 14:22:01

+0

我从来没有尝试过。只要文件通过该链接可访问,它应该没问题。重要的是这些文件看起来与postgres在同一个地方。 – Gary 2012-02-03 15:30:15

+0

我已将40个GiB的数据库移至另一个系统并重新引导系统。现在它工作正常。我已经删除了数据库,因为我只需要一个大数据库,并且有两个。我会做一个'真空满',但它已经工作了。感谢大家的帮助。 – Leonard 2012-02-06 10:22:38

2

您必须将数据文件移动到另一个分区,然后启动服务器,然后吸尘,然后将文件移回。简单。

+0

没有选择,每个数据库都是40 GiB,我可以删除其中的一个,但我必须确定它是哪一个,我不知道如何在linux中查看db名称。如果我知道它,我可以删除所有文件吗? – Leonard 2012-02-03 12:01:32

3

删除位于/ pg_log中的日志文件以清理某些内容并开始使用。

VACUUM不会回收磁盘空间,您需要VACUUM FULL。你也可以删除一些你现在不需要的索引或其他东西,只是为了回收空间。

== ==编辑

复制`pg_ident.conf'里到另一个磁盘或删除所有评论做出的空间只是一点点。复制后,你也可以清理postgresql.conf。

之后,在single user mode(使用--single)启动PostgreSQL并连接到要清理的数据库。清理完毕后,停止PostgreSQL并以正常模式重新启动。

+0

我没有“pg_log”目录,但是我有'pg_clog'和'pg_xlog'。我可以放弃两个目录中的一切吗? – Leonard 2012-02-03 11:42:14

+1

请勿触摸pg_clog和pg_xlog!检查日志的存储位置,postgresql.conf中的参数“log_directory”可能会告诉你更多。 – 2012-02-03 12:27:08

+0

好吧,日志在另一个磁盘上,所以它不会帮助我。感谢您的时间! – Leonard 2012-02-03 14:20:36