우분투 서버에서 postgres 9.1에서 9.3으로 업그레이드


27

postgresql 9.1로 실행중인 프로덕션 서버 (ubuntu 13.10)가 있습니다.

9.3의 몇 가지 기능을 사용하고 싶기 때문에 업그레이드하고 싶습니다.

가동 중지 시간이 30 분을 초과하지 않도록 누군가 9.1에서 9.3으로 업그레이드하는 데 도움을 줄 수 있습니까? 정도?

주요 관심사는 데이터 손실 또는 파일 중복을 방지하는 것입니다.


2
Postgres 문서는 정말 좋습니다. google.co.uk/#q=postgres+upgrade+from+9.1+to+9.3
Philᵀᴹ

나는 DBA 자체가 아니며 (이상한 Postgres 설치 및 심지어 mysql;}을 돌봐야 함)이 게시물은 오래되었지만 X.04 대신 prod에 Ubuntu X.10 릴리스를 사용하는 이유는 무엇입니까? LTS?
tink

답변:


28

기본적으로 PostgreSQL을 다른 주요 버전 (예 : 9.1에서 9.3)으로 업그레이드하는 세 가지 방법이 있습니다.

pg_dump로 업그레이드

첫 번째 버전 은 가능한 경우 최신 버전 (9.3)의 바이너리를 사용하여 이전 (9.1) 버전의 덤프를 수행 하여 최신 버전으로 작성된 새 클러스터에 복원하는 것이 좋습니다.

이 접근 방식은 일반적으로 느리지 만 가장 실행 가능한 방법입니다. 더 빠른 팁 중 하나는 동시성을 사용하는 것입니다. 병렬 작업으로 덤프하려면 다음을 수행하십시오.

$ pg_dump --format=directory --jobs=4 --no-synchronized-snapshots --file=/path/to/mydump mydatabase

보유한 각 데이터베이스에 대해 수행하고 --jobs=4값을 임의의 값으로 조정 해야합니다 (2에서 코어 수까지의 일부 값을 테스트하고 속도가 더 좋은 것을 확인하십시오). 또한이 단계 동안 아무도 데이터베이스에 연결되어서는 안되며, 수정하지 않으면 덤프가 손상됩니다 (비보안 옵션으로 인해 --no-synchronized-snapshots).

그런 다음 다음을 사용하여 새 인스턴스로 덤프를 복원 할 수 있습니다 pg_restore.

$ createdb <options> -T template0 mydatabase
$ pg_restore --exit-on-error --jobs=4 --dbname=mydatabase /path/to/mydump

그런 ANALYZE다음 데이터베이스 에서 실행 하는 것이 좋습니다 .

$ vacuumdb --analyze-only mydatabase

(당신은 시간을 줄 수있는 경우에만 실행 --analyze도에 VACUUM데이터베이스 및 가시성이 매핑 업데이트)

pg_upgrade로 업그레이드

또 다른 옵션 은 contribpg_upgrade 을 사용 하는 것 입니다. 이 --link방법을 사용하면 PostgreSQL을 업그레이드하는 정말 빠른 방법을 제공합니다.

사용하기 전에 전체 데이터 디렉토리를 백업해야합니다. --link모드에서는 문제가 발생하면 데이터를 모두 잃을 수 있습니다 (신규 및 이전). 또한 전체 문서와 하단 의 메모 를 읽으십시오 (pg_upgrade에는 몇 가지 제한 사항이 있습니다).

업데이트 : --check결정적 명령을 실행하기 전에 옵션을 사용하십시오 . 또한 큰 데이터베이스의 경우 화면 세션에서이 명령을 실행하는 것이 좋습니다.

트리거 기반 복제 도구를 사용하여 업그레이드

버전을 업그레이드하는 또 다른 옵션은 트리거 기반 복제 도구를 사용하는 것입니다. Slony, Bucardo 및 Londiste처럼.

다운 타임을 최소화해야하는 옵션이지만 작업하기가 가장 어렵습니다.

이를 위해서는 마스터가 현재 버전 (9.1)이고 슬레이브가 새 버전 (9.3) 인 마스터 슬레이브를 구축해야합니다. 그런 다음 첫 번째 동기화 (시스템이 여전히 프로덕션 상태에 있음)를 기다린 후 데이터베이스에 연결된 모든 사람을 닫고 (여기서 가동 중지 시간이 시작됨) 슬레이브가 따라 잡기를 기다렸다가 (슬레이브) 마스터 및 모든 클라이언트 / 응용 프로그램을이 새 버전으로 리디렉션하십시오. 그리고 당신은 끝났습니다.

Slony 문서는 Slony를 사용하여 PostgreSQL업그레이드 하기위한 단계별 지침을 제공합니다 .

어느 것을 선택할 것인가

항상 의존하는 것처럼 다음을 다시 시작하십시오.

  • 덤프 + 복원은 가장 신뢰할 만하지 만 일반적으로 가장 느립니다 (병렬 처리는 꽤 좋은 결과를 줄 수 있습니다)
  • pg_upgrade는 다운 타임이 거의없는 최상의 옵션 중 하나입니다 (사용할 수있는 경우 제한 사항 참조). 큰 데이터베이스의 경우에도 몇 분 밖에 걸리지 않습니다.
  • 트리거 복제는 의심의 여지없이 가능한 다운 타임을 최소화하는 것 (0 근처)이지만 실제로 달성하기는 어렵고 경험이 많은 사람들 (PostgreSQL 및 복제 도구 모두)에만 권장합니다.

도와 드릴 수 있기를 바랍니다. 행운을 빕니다.


pg_upgrade도 8.4.17에서 9.3으로 작동합니까?
JohnMerlino 2016 년

@JohnMerlino : 예, pg_upgrade는 8.3 이상 버전에서 업그레이드 할 수 있습니다 (8.3, 8.4, 9.0, 9.1, 9.2 등 포함).
MatheusOl

"최신 (9.3) 버전의 바이너리를 사용하는 것"은 그다지 필요하지 않을 수 있습니다. 최소한 그 비트를 수행하지 않고 작동하도록했습니다.
theicfire

@theicfire 실제로 두 버전 (이전 버전과 새로운 버전)에 따라 다르며 작동하거나 작동하지 않을 수 있습니다. 실제로 일반적으로 받아 들일 수있는 일부 오류 메시지를 제외하고 대부분의 경우 작동합니다. 공식 절차는 최신 버전의 이진 파일을 사용하는 것입니다!
MatheusOl

한 번에 모든 데이터베이스 pg_dumpall를 덤프 하는 데 사용할 수 있습니다 .
Matthieu

7

postgres 9.1을 9.3으로 업그레이드하려면 다음 단계를 따르십시오.

  1. 먼저 우분투에 대한 다음 내용으로 /etc/apt/sources.list.d/pgdg.list 파일을 만듭니다.

    deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main 
  2. 다음을 실행하는 키를 추가하십시오.

     wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. postgres로 개발자 도구를 설치하십시오.

    sudo apt-get install postgresql-9.3 postgresql-contrib-9.3 postgresql-server-dev-9.3 pgadmin3
  4. 설치를 확인하기 위해“sudo pg_lsclusters”를 입력하고 두 가지 버전의 PostgreSQL이 실행중인 것을 볼 수 있습니다.

  5. Postgressql 서비스 중지 :

    sudo service postgresql stop
  6. 9.3 설치로 작성된 기본 9.3 클러스터를 삭제하십시오.

    sudo pg_dropcluster --stop 9.3 main
  7. 기존 9.1 클러스터에서 새 9.3 클러스터를 작성하십시오.

    sudo pg_upgradecluster 9.1 main
  8. 새 클러스터가로드되고 PostgreSQL 9.3이 실행되고 있는지 확인하십시오.

    sudo service postgresql start 9.3
  9. 모든 것이 작동하면 9.1 클러스터로 떨어집니다.

    pg_dropcluster --stop 9.1 main

자세한 내용은이 링크를 참조하십시오


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.