티스토리 뷰
독립 실행 형 도구 로 완벽하게 사용할 수 있습니다 .
Windows를 사용하는 것으로 보이므로 도와 드릴 수는 없지만 Unix에서 수행 할 작업은 다음과 같습니다.
다음 명령은 3 일이 지난 최근 체크 포인트까지 정리를 요청합니다. $ ARCHIVEDIR을 설정 하여 아카이브 로그 덤프와 일치 시켜야합니다 .
find $ARCHIVEDIR -mtime +3 -name '*backup' -printf '%f\n' | sort -r | head -1 | xargs pg_archivecleanup $ARCHIVEDIR
더 완전한 스크립트는 다음과 같습니다.
#!/bin/bash
ARCHIVEDIR='/var/lib/pg_xlog_archives/whatever/'
CHKPOINT=$(find $ARCHIVEDIR -type f -mtime +3 -name '*backup' -printf '%f\n' | sort -r | head -1)
cd $ARCHIVEDIR
/usr/lib/postgresql/9.3/bin/pg_archivecleanup $ARCHIVEDIR $CHKPOINT
find $ARCHIVEDIR -type f -mtime +3 -a -name '*backup' -a ! -newer $CHKPOINT -delete
-------------------쉘 스크립트를 통해 pg_archivecleanup을 실행해서는 안됩니다. 이 유틸리티의 목적은 아카이브 디렉토리를 읽을 때 recovery.conf를 통해 복제본에 의해 호출됩니다. 실제 복제본 데이터베이스 만이 제거 할 수있는 파일을 알고 있습니다.
또한 archivecleanup은 pg_xlog 디렉토리에서 사용 되지 않습니다 . 마스터에서 archive_command를 사용하여 지정한 위치에 저장되는 로그의 아카이브 사본에 사용됩니다.
예:
마스터 postgresql.conf :
archive_command = "scp %f replica:/usr/share/wal_archive:%r"
(참고 : 위의 대신에 아카이브 명령이 스크립트를 호출하도록하는 것이 좋습니다.)
복제본 recovery.conf :
archive_cleanup_command = 'pg_archivecleanup /usr/share/wal_archive %r'
출처
https://stackoverflow.com/questions/39917141
댓글