2012-02-03 6 views
3

이 질문은 PostgreSQL 8.3에 관한 것입니다. 아직 태그를 만들 수 없어 버전 8.4를 태그로 사용합니다.PG 8.3, Disk Full, 서버가 시작되지 않습니다.

테스트 서버이지만 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! 

리눅스는 확실히 작동하고 충분한 디스크 공간이 마련되어 있습니다. PostgreSQL은/​​var/lib /에 마운트 된 자체 파티션을 가지고 있으며 사용 가능한 바이트는 없습니다.

데이터베이스 서버를 다시 시작하기 전에 공간을 확보해야한다고 생각하지만 삭제할 파일을 모르겠습니다. 로그 파일은 같은 파티션에 있지 않으므로 로그 파일을 비우는 데 도움이되지 않습니다. 아무도 이걸 도와 줄 수 없나요?

답변

8

pg_log은 그들이 데이터베이스 내부위한 것입니다으로 pg_xlog 또는 pg_clog 디렉토리를 삭제하지 마십시오 관리자 정기 로그입니다 해제 할 수 있습니다 (그들을 치료로 당신 것베이스 데이터 파일). 그들을 제거하면 공간이 있더라도 문제가 다시 발생할 수 있습니다.

내가 (백업을 복용 후) 시도하려는 프로세스는 다음과 같습니다

꽤 큰입니다 /var/lib/pgsql 나무 아래 디렉토리를 찾아,하지만 다른 파일 시스템에 복사 할 수 없을 정도로 크지 않다. 그것은 전체 base 디렉토리 등일 필요는 없으며, 거기에 서브 디렉토리가있을 수 있습니다.

해당 디렉토리 (서브 디렉토리 포함)의 내용을 다른 파일 시스템에 복사하십시오.

이전 디렉터리를 제거한 다음 이전 디렉터리가 새 위치에 있었던 기호 링크를 만듭니다.

데이터베이스를 시작하고 VACUUM FULL (또는 이제 데이터베이스에 액세스 할 수 있거나 액세스 할 수있는 데이터베이스가없는 경우 데이터베이스를 삭제할 수 있습니다).

데이터베이스를 종료하십시오.

심볼릭 링크를 제거하고 파일을 다시 var/lib 파일 시스템으로 다시 이동하십시오.

당신이 파일 시스템 백업을 할 수 없다는 사실은 당신의 환경에서 나에게 조금 싫은 기색을하게 만듭니다.

+0

Linux에서 Windows 파일 시스템으로 복사본을 만들면 문제는 없습니다. – Leonard

+0

나는 그것을 결코 시도하지 않았다. 링크를 통해 파일에 액세스 할 수있는 한 괜찮습니다. 중요한 점은 파일이 포스트그레스와 같은 위치에있는 것 같습니다. – Gary

+0

나는 40 GiB의 db를 다른 시스템으로 옮기고 시스템을 재부팅했다. 이제는 괜찮습니다. 하나의 큰 DB 만 필요하기 때문에 데이터베이스를 제거했으며 그 중 두 개가있었습니다. 나는 '진공으로 가득 차있'을 할 것이지만 이미 효과가있다. 도움을 주신 모든 분들께 감사드립니다. – Leonard

2

데이터 파일을 다른 파티션으로 이동 한 다음 서버를 시작한 다음 파일을 제거하고 파일을 뒤로 이동해야합니다. 쉬운.

+0

옵션이 없으면 데이터베이스는 각각 40GB입니다. 그 중 하나를 삭제할 수는 있지만 어느 것이고 Linux에서 db 이름을 보는 방법을 모르겠습니다. 내가 알면 모든 파일을 지울 수 있을까? – Leonard

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

+1

pg_clog 및 pg_xlog를 만지지 마십시오! 로그가 저장된 위치를 확인하면 postgresql.conf의 "log_directory"매개 변수가 더 자세히 알려줍니다. –

+0

괜찮습니다. 로그가 다른 디스크에 있으므로 도움이되지 않습니다. 시간 내 주셔서 감사합니다! – Leonard

관련 문제