2019년 9월 11일 수요일

PostgreSQL 업그레이드(upgrade) 방법

PostgreSQL의 version은 major, minor version 으로 구분된다.
10 이후 version은 두 자리로 구성되고, 이전 version은 세 자리로 구분된다.

예를 들어 10.1 version에서 10은 major version, 1은 minor version을 의미한다.
예를 들어 9.5.3 version에서 9.5는 major version, 3은 minor version을 의미한다.

minor version인 경우 내부 스토리지에 변화가 없기 때문에 new version 설치 후, PostgreSQL 서버를 구동하면 된다.

major version인 경우 pg_upgrade를 사용하여 upgrade 가능하다.

minor version 업그레이드
  1. old version PostgreSQL 서비스를 정지한다.
  2. old version binary를 백업한다.
  3. new version binary를 설치한다.
  4. OS의 env 설정을 확인한다.
  5. new version PostgreSQL 서비스를 시작한다.

Major version 업그레이드 (pg_upgrade 사용)
  1. old version data의 용량을 확인한다.
  2. old version data만큼의 disk 용량이 남아있는지 확인한다. old version data와 비슷한 용량의 new version data가 생성되기 때문이다.
  3. pg_upgrade가 정상적으로 실행될지 확인해 본다.
    pg_upgrade --old-bindir="/postgresql9.4.11/bin" --new-bindir="/postgresql10.7/bin" --old-datadir="/data9.4" --new-datadir="/data10.7" --verbose --check
  4. old version PostgreSQL 서비스를 정지한다.
  5. old version binary를 백업한다.
  6. new version binary를 설치한다.
  7. new version initdb를 실행한다.
  8. 만약 필요하다면 extension을 설치한다.
  9. old version pg_hba.conf의 내용을 trust로 변경한다.
  10. new version pg_hba.conf의 내용을 trust로 변경한다.
  11. pg_upgrade를 실행한다.
    pg_upgrade --old-bindir="/postgresql9.4.11/bin" --new-bindir="/postgresql10.7/bin" --old-datadir="/data9.4" --new-datadir="/data10.7" --verbose
  12. 현재 디렉토리에 analyze_new_cluster.sh, delete_old_cluster.sh 생성되었는지 확인한다.
  13. old version pg_hba.conf를 원복한다.
  14. old version pg_hba.conf를 new version으로 복사한다.
  15. old version postgresql.conf를 new version으로 복사한다.
  16. OS의 env 설정을 확인한다.
  17. new version PostgreSQL 서비스를 시작한다.
  18. analyze_new_cluster.sh를 실행한다. (통계정보 갱신)
  19. delete_old_cluster.sh를 실행한다. (old version data 삭제)






QnA

  • Q. pg_upgrade 사용중 문제 발생 시, 원복이 가능한가?
  • A. old version data를 사용해서 new version data로 새롭게 생성하기 때문에, old version data에는 변동이 없다. 그러므로 old version data를 그대로 사용하면 된다.

  • Q. pg_upgrade 사용시 disk 용량은 얼마나 필요한가?
  • A. old version data를 사용해서 new version data를 생성하기 때문에, old version data 만큼의 disk 용량이 필요하다.

  • Q. pg_upgrade 사용 시간은 얼마나 걸리나?
  • A. 아래와 같은 환경에서 약 20분 소요된다. (old version data, new version data 같은 HDD에 있음)
    analyze_new_cluster.sh는 약 4분 소요된다.
    CPUIntel(R) Core(TM) i7-7700 CPU @ 3.60GHz
    RAMSamsung DDR4 8GB PC4-19200 2400MHZ
    HDDWDC WD10EZEX 7200RPM
    Data size100GB

  • Q. new version data를 위한 disk 용량이 부족할 경우 어떻게 해야 하나?
  • A. pg_upgrade 옵션중에 --link 옵션을 사용하면, 추가적인 용량없이 작업이 가능하다. 복구는 "mv $PGDATA/global/pg_control.old $PGDATA/global/pg_control" 수행하면 된다.

댓글 없음:

댓글 쓰기

화곡 어쩌라고, 굴사냥

석화찜(굴찜)을 먹으러 여의도로 갔다 그런데 재료가 모두 소진되었다고 마감이라고 한다 응? 다들 굴에 미쳤나? 굴을 찾아 헤매다 보니, 화곡까지 가게 되었다. 화곡은 처음 가본다. 첫인상은 "술집 겁네 많네" 피똥쌀때까지 마실 수 있...