지속적으로 수정되는 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를 신뢰할 수 있다는 진술에 완전히 동의하지 않는다고 말했습니다.