2009-02-28 11 views
13

갑자기 정전되어 로컬 컴퓨터에서 실행중인 PostGres 서버가 갑자기 종료되었습니다. 재부팅 후, 나는 포스트 그레스를 다시 시작 시도하고이 오류 얻을 :갑자기 종료 된 후에 Postgres가 시작되도록 수정하는 방법은 무엇입니까?

$ pg_ctl -D /usr/local/pgsql/data restart

pg_ctl: PID file "/usr/local/pgsql/data/postmaster.pid" does not exist 
Is server running? 
starting server anyway 
server starting 
$:/usr/local/pgsql/data$ LOG: database system shutdown was interrupted at 2009-02-28 21:06:16 
LOG: checkpoint record is at 2/8FD6F8D0 
LOG: redo record is at 2/8FD6F8D0; undo record is at 0/0; shutdown FALSE 
LOG: next transaction ID: 0/1888104; next OID: 1711752 
LOG: next MultiXactId: 2; next MultiXactOffset: 3 
LOG: database system was not properly shut down; automatic recovery in progress 
LOG: redo starts at 2/8FD6F918 
LOG: record with zero length at 2/8FFD94A8 
LOG: redo done at 2/8FFD9480 
LOG: could not fsync segment 0 of relation 1663/1707047/1707304: No such file or directory 
FATAL: storage sync failed on magnetic disk: No such file or directory 
LOG: startup process (PID 5465) exited with exit code 1 
LOG: aborting startup due to startup process failure 

데이터 디렉토리에는 postmaster.pid 파일이 없습니다입니다. 이런 종류의 행동에 대한 이유는 무엇일까요? 물론 탈출구는 무엇일까요?

+0

아마 알고 계실지 모르지만 백업에서 복원해야 할 수도 있습니다. 하지만 그렇게하기 전에 Postgres 버전을 v8.1.5 및 v8.1에서 공유하십시오.6 IIRC가 복구 중에이 오류를 유발하는 버그가 있음) 및 파일 시스템 유형 (다음 중단 전에 변경하려고 할 수 있습니다.) – vladr

+0

힌트 : "다시 시작"을 실행하면 PostgreSQL이 실행 중이고 다시 시작해야한다는 메시지가 나타납니다. 실행 중이 지 않으므로 프로세스 ID (.pid) 파일이 없습니다. – Kurt

+0

어떤 postgres 버전을 사용하고 있으며'/ usr/local/pgsql/data' 파일 시스템 유형은 무엇입니까? – vladr

답변

0

아직 시도하지 않은 경우 해당 디스크에서 fsck을 실행 해보십시오.

6

("저장 동기화가 자기 디스크에 실패 : 해당 파일 또는 디렉토리") PostgreSQL의 메일 링리스트의 아카이브에서 몇 유사한 메시지를 읽기 매우 심각한 하드웨어 문제, 훨씬 더가 발생한 것을 나타 내기 위해서 보인다 단순한 정전보다. 백업에서 복원 할 준비를해야 할 수도 있습니다.

+0

Ant P, Vlad Romascanu 및 bortzmeyer - 모든 commennts에 감사드립니다. 하드 디스크가 전원 스파이크로 인해 손상된 것으로 알고 있습니다. 나는 포스트 그레스를 다른 기계로 옮겨야 만한다. –

+0

그것이 맞다면, 당신은 두 가지 대답을 upvote 할 수 있습니다. – bortzmeyer

+0

@bortzmeyer : 정답으로 Upvoted. –

18

pg_resetxlog이 필요합니다. 이 경우 데이터베이스가 일관성이없는 상태가 될 수 있으므로 pg_dumpall으로 덤프하고 다시 만들고 다시 가져옵니다.

이에 대한 원인이 될 수 :

  • 당신은 종종 이 응용 프로그램에 성공적으로 쓰기를보고하기 전에 작성되어 있는지 데이터를 만들기에서 OS를 방지 디스크의 하드웨어 쓰기 캐시를 해제하지 않았습니다. 그 다음이 경우 될 수있다 "캐시를 쓰기"전에 "*"표시되면

    hdparm -I /dev/sda

    확인하십시오. Source of PostgreSQL에는 디스크와 데이터를 동기화하는 속도를 테스트하는 src/tools/fsync/test_fsync.c 프로그램이 있습니다. 실행 - 디스크가 운영 체제에 누워있는 시간보다 3 초 짧은 모든 시간을보고하는 경우 - 7500rpm 디스크에서 같은 위치에 1000 번 쓰기를 테스트하려면 최소 8 초 (1000/(7500rpm/60s)) 한 번만 쓸 수 있습니다. 당신은 당신의 데이터베이스는/var/tmp에 파티션이 아닌 다른 디스크에있는 경우이 test_fsync.c을 편집해야 할 것입니다 - 당신의 디스크가 실패

    #define FSYNC_FILENAME "/var/tmp/test_fsync.out"

    #define FSYNC_FILENAME "/usr/local/pgsql/data/test_fsync.out"

  • 에 변경 불량 블록이있는 경우 badblocks으로 확인하십시오.

  • RAM이 불량이거나 memtest86+으로 8 시간 이상 확인하십시오.

+0

고마워요. 나는 DB를 옮겼지만 당신의 옵션을 시험해보기로 결심했다. 그것은 작동했으며 db가 복원되었습니다. pg_resetxlog가 트릭을 완료했습니다. –

+0

이 문제는 Windows OS 업그레이드가 발생하는 경우에도 발생할 수 있습니다. 전자 메일 관리자는 액세스 할 수 없게 될뿐만 아니라 데이터 폴더 및 서비스에 대한 사용 권한이 사라질 수 있습니다. pg_resetxlog는 첫 번째 문제를 해결합니다. – MytyMyky

+0

이것은 또한 Linux에서 엄청나게 오버로드 된 스토리지 서브 시스템에서 발생할 수 있습니다. –

0

다시 시작하는 대신 시작 프로그램을 실행하십시오. 아래 명령을 실행하십시오.

$pg_ctl -D /usr/local/pgsql/data start 
+0

나는 이렇게 할 때 여전히 같은 오류가 발생합니다. – student001

관련 문제