데비안 프로덕션 서버에서 PostgreSQL을 업그레이드하는 완벽한 솔루션

데비안 프로덕션 서버에서 PostgreSQL을 업그레이드하는 완벽한 솔루션

저는 몇 개의 웹사이트 제작에 Debian 6(Squeeze)을 사용하고 있습니다. PostgreSQL 9.0 기능을 사용할 수 있도록 postgresql 백포트를 사용하기로 결정했습니다. 나는 그것이 9.0으로 유지되고 해당 주요 버전에 대한 업데이트를 받을 것이라고 생각했습니다.

불행히도 Squueze 백포트는 PostgreSQL 9.1로 업데이트되었으므로 아마도 9.0에 대한 업데이트를 받지 못할 것입니다.

9.1로 업그레이드할 계획이지만 자동으로 업그레이드되지는 않는다는 것을 알고 있습니다.

공식 pg_upgrade와 데비안의 pg_upgradecluster에 대해 읽었지만 업그레이드에 대한 완전한 가이드를 주시면 감사하겠습니다.

  1. 수행할 단계는 무엇입니까(먼저 apt-get으로 postgresql을 설치한 다음 pg_upgradecluster를 설치하고 이전 클러스터를 제거함)? 단계 목록이 좋을 것입니다.
  2. 가능한 실패 시나리오는 무엇입니까?
  3. 실패에 어떻게 대비하고 대응할 것인가?

몇 시간 동안만 데이터베이스를 중지할 수 있으므로 대비하고 싶습니다.

답변1

귀하의 상황/환경에 맞는 단계별 업그레이드 프로세스를 제공하는 것은 꽤 어렵습니다.
아래에서 몇 가지 주요 사항을 설명하려고 노력했지만 프로세스를 환경에 맞게 조정해야 합니다.


0단계, 업그레이드가 필요한지 결정하세요. Postgres 9.1은 동기식 복제와 필요한 경우 유용하지만 그렇지 않은 경우 즉시 업그레이드할 이유가 되지 않는 기타 멋진 기능을 제공합니다.

1단계, 데이터베이스가 클 경우 시간이 오래 걸릴 것으로 예상합니다. 백업을 위해 데이터를 복사하는 간단한 프로세스를
사용하더라도 pg_upgrade시간이 걸릴 수 있습니다. 16GB 데이터베이스는 pg_dump/pg_restore의 경우 1시간 이상이 걸리고 pg_upgrade의 경우 약 10-20분이 걸립니다.

2단계, 다음 내용을 읽어 보시기 바랍니다.9.1 릴리스 노트. 필요한 것이 파손되지 않았는지, 사용하는 것이 변경되지 않았는지 확인하세요.
프로덕션 시스템을 파괴하여 한 달을 망치는 데이터베이스 업그레이드만큼 좋은 것은 없습니다.

3단계,Postgres 매뉴얼의 업그레이드 섹션독서가 필요합니다.

4단계, (데비안 관련 항목을 여기에 삽입하세요. 하지만 그건 내 가방이 아닙니다 :-)

5단계, 업그레이드 계획을 수립합니다.

6단계, 업그레이드 계획 테스트(기술적으로는 선택 사항이지만강하게권장).

7단계, 프로덕션 시스템에서 업그레이드를 수행합니다.


표준 주의 사항이 적용됩니다.

  • 업그레이드하면 데이터베이스가 손상될 수 있습니다. 백업을 하세요.
    • 복원할 수 있는지 확인하세요.
    • 복원할 수 있는지 확인하세요.바이너리데이터베이스 시스템에도 마찬가지입니다.
      (가능하다면 이전 데비안 패키지를 사용하세요. 이전 데이터베이스 바이너리가 더 이상 없기 때문에 실패한 업그레이드에서 되돌릴 수 없는 사람들을 본 적이 있는데 이는 참으로 매우 슬픈 광경입니다.)

  • 예상보다 시간이 오래 걸릴 것입니다. 이를 계획하십시오.
    저희 회사의 DB 업그레이드 정책은 "금요일 오후 6시에 시작합니다. 일요일 오전 9시까지 작동하지 않으면 롤백합니다."입니다.

  • 스크래치 몽키 마운트
    데이터가 정말 중요한 경우 복사본을 다른 곳에 복원하고 업그레이드 경로를 테스트하세요.
    예, 저는 16GB 데이터베이스로 이 작업을 수행합니다. 작동하게 하는 방법을 찾을 수 있다면 160GB 데이터베이스로 계속 수행하겠습니다. :-)

답변2

이는 기본적으로 4단계이며 --check경로가 올바른지 확인하는 옵션도 포함되어 있습니다. 내 설치는 저장소에서 이루어졌으며 파일에 대한 표준 데비안 경로가 있습니다.

[email protected]:~$ /usr/lib/postgresql/9.1/bin/pg_upgrade --old-datadir /var/lib/postgresql/9.0/main --new-datadir /var/lib/postgresql/9.1/main --old-bindir /usr/lib/postgresql/9.0/bin/ --new-bindir /usr/lib/postgresql/9.1/bin/ --check

위의 작업은 실패했습니다. 동일한 포트에서 두 서버를 모두 실행하고 있다고 일관되게 말했습니다.

다음이 작동하는 것 같았습니다.

pg_dumpall -p 5432 | psql -d postgres -p 6543

이것은 유용하다.

관련 정보