라이브 DB에서 pg_dump를 실행하면 일관된 백업이 생성됩니까?


37

지속적으로 수정되는 3GB 데이터베이스가 있으며 서버를 중지하지 않고 백업해야합니다 (Postgres 8.3).

내 pg_dump가 5 분 동안 실행됩니다. 프로세스 중에 데이터가 수정되면 어떻게됩니까? 일관된 백업을 받습니까? 언제 재난이 닥쳤는지 알고 싶지 않습니다.

Postgres 설명서 http://www.postgresql.org/docs/8.3/static/app-pgdump.html 은 이것에 대해 아무 말도하지 않습니다.


4
안녕 Roddick. 재해가 발생 하기 전에 복원 프로세스 테스트하는 것이 좋습니다 . 다른 머신을 설정하고 백업 중 하나를 사용하여 복원하여 테스트하십시오.
데릭 다우니

답변:


53

로부터 수동 :

데이터베이스를 동시에 사용하더라도 일관된 백업을 수행합니다.

예, 백업을 신뢰할 수 있습니다. 물론 PostgreSQL이므로 PostgreSQL에서 데이터를 신뢰할 수 있습니다.


10
"PostgreSQL에서 데이터를 신뢰할 수 있습니다"를 읽을 때 문자 그대로 LOL했습니다. :)
François Beausoleil

매뉴얼에 대한 링크는 좋을 것입니다
Pablo Fernandez

1
@PabloFernandez : 완료!
Frank Heikens

1
그러나 라이브 데이터베이스의 논리적 백업은 테이블을 잠그므로이 정보를 놓치지 마십시오. 아마 당신은 몇 가지 팁을 찾을 수 있습니다 : compose.com/articles/…
tryp

그래서 그게 뭐가 그렇게 재미 있어요? postgresql 사용을 중단해야합니까?
777Anon

12

pg_dump는 다른 오래 실행되는 쿼리의 작동 방식과 유사하게 트랜잭션을 시작합니다. 일관성은 MVCC 구현 에서 나옵니다 . 덤프는 해당 규칙 내에서 항상 일관됩니다.

MVCC의 모든 퍼지 부분은 UPDATE 트랜잭션이 다른 클라이언트에게 표시되는 순서 및 잠금 획득 방법과 같은 것입니다. pg_dump는 순서가 엄격하며 전체 데이터베이스에서 읽기 잠금을 획득하여 덤프합니다. 대부분의 사람들은 그것이 기대하는 바이며, 사용 된 메커니즘은 결코 문제를 일으키지 않습니다. 주요 동시성 위험은 덤프가 실행되는 동안 데이터베이스 구조를 변경하려는 클라이언트가 차단된다는 것입니다. 그래도 덤프 품질에는 영향을 미치지 않습니다.


11

덤프는 설정으로 시작합니다 TRANSACTION ISOLATION LEVEL SERIALIZABLE.

트랜잭션 격리 에 대한 매뉴얼 과 이에 대한 사용자 목록 토론을 읽으십시오 .

인용문:

백업에는 격리 수준을 설정하기 전에 커밋 된 트랜잭션 만 표시됩니다.

기본적으로 pg_dump트랜잭션 격리 수준 을 설정 한 후의 모든 항목 은이 덤프의 일부 가 아닙니다 .

해당 시간 동안 읽기 / 쓰기 작업은 영향을받지 않습니다.


-1

이 오래된 스레드에 대한 답변에 대해 먼저 죄송합니다. 그러나 내 경험으로는 pg_dump /를 신뢰할 수 있다는 진술을 확인할 수 없습니다.

몇 달 전에 프로젝트를 postgres로 전환했습니다. 물론 제안한대로 라이브 시스템에서 pg_dump로 모든 백업을 만들었습니다. 그러나 첫 번째 백업 확인 후 모든 덤프의 크기가 다른 것을 알았습니다. 그중 일부를 무작위로 복원 한 후 일부 테이블이 누락되었음을 알았습니다. 그래서 왜 이런 일이 발생했는지 분석하기 시작했고 응용 프로그램 서버와 같은 오버레이 응용 프로그램이 일부 테이블을 잠그고 pg_dump가 해제 될 때까지 대기하지 않는다는 것을 알았습니다. 백업 기간 동안 서버를 중지 할 때마다 좋은 해결책이 아니 었습니다.

그래서 나는 여전히 픽스를 찾고 있지만 pg_dump를 신뢰할 수 있다는 진술에 완전히 동의하지 않는다고 말했습니다.


이 경우 pg_dump에서 심각합니다. 어떤 버전을 사용하고 있습니까? 내 질문은 3 년 전이었고 지금은 pg_dump를 사용하여 라이브 백업을 수행하는 9.3 및 Amazon reds에 있습니다. 그들은 틀릴 수 없습니다.
로마

직렬화 된 백업을 수행하기 위해 pg_dump를 신뢰할 수 있습니다 (링크 / 문서 및 몇 가지 세부 정보는 내 대답 참조). 내 독서를 읽는 동안 DB 자체의 구조를 변경해서는 안된다는 것을 읽었습니다. . 삽입 / 업데이트 / 삭제 만 수행하므로 테이블 생성에 대해서는 언급 할 수 없습니다. 우리에게는 방금 pg_dump 시간 동안 테이블을 만들지 않도록했습니다.
Dennis Nolte

2
귀하의 진술은 심각한 버그 (버그 보고서를 제출 했습니까?), 데이터베이스를 덤프하는 방식에 심각한 버그 또는 오해를 나타냅니다. 어떤 사실도 결여하면 이들 중에서 결정할 수 없습니다.
dezso
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.