지속적으로 수정되는 3GB 데이터베이스가 있으며 서버를 중지하지 않고 백업해야합니다 (Postgres 8.3).
내 pg_dump가 5 분 동안 실행됩니다. 프로세스 중에 데이터가 수정되면 어떻게됩니까? 일관된 백업을 받습니까? 언제 재난이 닥쳤는지 알고 싶지 않습니다.
Postgres 설명서 http://www.postgresql.org/docs/8.3/static/app-pgdump.html 은 이것에 대해 아무 말도하지 않습니다.
지속적으로 수정되는 3GB 데이터베이스가 있으며 서버를 중지하지 않고 백업해야합니다 (Postgres 8.3).
내 pg_dump가 5 분 동안 실행됩니다. 프로세스 중에 데이터가 수정되면 어떻게됩니까? 일관된 백업을 받습니까? 언제 재난이 닥쳤는지 알고 싶지 않습니다.
Postgres 설명서 http://www.postgresql.org/docs/8.3/static/app-pgdump.html 은 이것에 대해 아무 말도하지 않습니다.
답변:
로부터 수동 :
데이터베이스를 동시에 사용하더라도 일관된 백업을 수행합니다.
예, 백업을 신뢰할 수 있습니다. 물론 PostgreSQL이므로 PostgreSQL에서 데이터를 신뢰할 수 있습니다.
pg_dump는 다른 오래 실행되는 쿼리의 작동 방식과 유사하게 트랜잭션을 시작합니다. 일관성은 MVCC 구현 에서 나옵니다 . 덤프는 해당 규칙 내에서 항상 일관됩니다.
MVCC의 모든 퍼지 부분은 UPDATE 트랜잭션이 다른 클라이언트에게 표시되는 순서 및 잠금 획득 방법과 같은 것입니다. pg_dump는 순서가 엄격하며 전체 데이터베이스에서 읽기 잠금을 획득하여 덤프합니다. 대부분의 사람들은 그것이 기대하는 바이며, 사용 된 메커니즘은 결코 문제를 일으키지 않습니다. 주요 동시성 위험은 덤프가 실행되는 동안 데이터베이스 구조를 변경하려는 클라이언트가 차단된다는 것입니다. 그래도 덤프 품질에는 영향을 미치지 않습니다.
덤프는 설정으로 시작합니다 TRANSACTION ISOLATION LEVEL SERIALIZABLE
.
트랜잭션 격리 에 대한 매뉴얼 과 이에 대한 사용자 목록 토론을 읽으십시오 .
인용문:
백업에는 격리 수준을 설정하기 전에 커밋 된 트랜잭션 만 표시됩니다.
기본적으로 pg_dump
트랜잭션 격리 수준 을 설정 한 후의 모든 항목 은이 덤프의 일부 가 아닙니다 .
해당 시간 동안 읽기 / 쓰기 작업은 영향을받지 않습니다.
이 오래된 스레드에 대한 답변에 대해 먼저 죄송합니다. 그러나 내 경험으로는 pg_dump /를 신뢰할 수 있다는 진술을 확인할 수 없습니다.
몇 달 전에 프로젝트를 postgres로 전환했습니다. 물론 제안한대로 라이브 시스템에서 pg_dump로 모든 백업을 만들었습니다. 그러나 첫 번째 백업 확인 후 모든 덤프의 크기가 다른 것을 알았습니다. 그중 일부를 무작위로 복원 한 후 일부 테이블이 누락되었음을 알았습니다. 그래서 왜 이런 일이 발생했는지 분석하기 시작했고 응용 프로그램 서버와 같은 오버레이 응용 프로그램이 일부 테이블을 잠그고 pg_dump가 해제 될 때까지 대기하지 않는다는 것을 알았습니다. 백업 기간 동안 서버를 중지 할 때마다 좋은 해결책이 아니 었습니다.
그래서 나는 여전히 픽스를 찾고 있지만 pg_dump를 신뢰할 수 있다는 진술에 완전히 동의하지 않는다고 말했습니다.