2009-02-05 4 views
9

가) 대규모 PostgreSQL 데이터베이스 (최신 Ubuntu 서버에서 실행되는 버전 8.3)를 정기적으로 백업하는 가장 좋은 솔루션은 무엇입니까? 가장 현실 세계에서 작동 PostgreSQL 데이터베이스 복제 솔루션PostgreSQL 복원 및 백업 솔루션

+0

pg_dump는 기본적으로 insert 문을 사용하지 않습니다. 기본적으로 COPY 명령을 사용합니다. -d 또는 --inserts의 명령 행 스위치는 pg_dump가 삽입 명령문을 내보내기에 넣게합니다. COPY가 너무 느린 것을 의미합니까? 또는 -d 또는 --inserts 명령 스위치를 사용하고 있습니까? –

+0

내가 삽입 문을 끌 수 있다는 것을 몰랐다. COPY는 OK이다. 나쁘다. – tropikalista

답변

4

A. A. pg_dump는 기본적으로 삽입 문을 사용하지 않습니다. 기본적으로 COPY 명령을 사용합니다. -d 또는 --inserts의 명령 행 스위치는 pg_dump가 삽입 명령문을 내보내기에 넣게합니다. pg_dump 명령에 이러한 스위치가있는 경우 pg_dump가 COPY를 사용하도록 스위치를 제거하십시오.

B. Postgres의 다음 버전에서 그들은 simple replication을 즉시 사용하게 될 것입니다. 나는 8.4 버전이 곧 출시 될 것으로 생각한다. 가능하다면, 그렇게할만한 가치가있을 것입니다.

2

당신은 야간의 조합 아마도 Online WAL-Backup를 사용할 수 있습니다 무엇 그 고통스럽게 천천히 삽입 문

B)와 pg_dump의 말을하지 마십시오/일/주/매월 pg_dumps. 일주일에 한 번 전체 클러스터를 복사해야합니다.

복원 작업이 매우 효과적이며 일찍 복사하면 데이터가 손실되지 않습니다 (rsync는 효과적이기 때문에 가장 좋습니다).

속도는 최신 전체 클러스터 백업/복사본보다 늦은 WAL 만 적용하면되므로 속도가 좋습니다.

6

나는 거기에 단 하나의 대답이 있다고 생각합니다.

PITR 또는 특정 시점 복구. 그것은 기본적으로 트랜잭션 로그를 보관하는 것이며, 알고있는 한 최선의 방법으로 백업을 수행합니다.

8.1 용으로 몇 번 설정했지만 8.3에서는 같아야합니다.

이는 postgresql.conf에서 당신이해야 할 모든이 추가하는 것입니다 : 당신이 안전의 백업 소프트웨어를 백업 할 수 있습니다 지정된 디렉토리에

archive_command = 'test ! -f /path/to/your/backups/archive_logs/%f && cp -i %p /path/to/your/backups/archive_logs/%f </dev/null' 

이 명령은 복사 아카이브 로그를하여 선택.

전체 백업을하려면 먼저 PostgreSQL에 백업을 수행해야한다고 알려야합니다. psql 명령 psql "SELECT pg_start_backup('my_backup');" 을 통해 수행됩니다. 그런 다음 rsync, cpio 또는 다른 도구를 사용하여 데이터 디렉토리를 복사하십시오. 데이터베이스가 많이 사용되는 경우 파일이 복사 중에 변경되므로 도구가 올바르게 처리하고 복구 할 수없는 것이 중요합니다.

복사가 끝나면 psql "SELECT pg_stop_backup();"을 실행하여 PostgreSQL에서 다시 중지하도록 지정하십시오. 이러한 명령이 수행하는 작업은 백업이 시작된 보관 로그에 마커를 넣는 것입니다. 따라서 복원시 어디에서부터 읽기 시작해야하는지 알고 있습니다.

이 기술은 복제를 위해 대기 모드를 유지하는 데에도 사용할 수 있지만 읽을 수 없으며 긴급한 상황에서 인계 할 준비가되었습니다. 완전 핫 스탠바이가 8.4 버전으로 생각됩니다. 그때까지는 다른 옵션이 있다고 생각하지 않습니다.

PITR을 사용하면 가장 좋은 점은 보관 로그를 추가 할 시간을 지정할 수 있다는 것입니다.따라서 데이터베이스를 사고로부터 보호 할 수도 있습니다 (일부 데이터 제거 또는 변경)