※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자료 퍼가실 때는 출처 남겨주세요!
ο 목차
※ 코드 보는 방법 참고
ㅇ 달러 기호($)가 있는 경우 -> 리눅스 터미널에서 CLI 명령어 입력
ㅇ "=#" 기호가 있는 경우 -> psql 쉘에서 명령어 입력
ㅇ 꺽쇠가 하나 있는 경우(>) -> 윈도우 명령 프롬프트(cmd)에서 명령어 입력
ㅇ 꺽쇠가 세개 있는 경우(>>>) -> python 쉘에서 명령어 입력
모니터링 시스템을 만든지 어언 2년 반이 지나고 나니...
zabbix 버전도 노후되고(4.2) 데이터베이스 버전(9.2)도 노후가 돼버렸습니다.

(이제 더 이상 develop 지원이 안된다니...)
zabbix 버전 업그레이드를 하는김에 데이터베이스도 같이 업그레이드를 해주기로 했습니다.ㅜ
Centos7 에서 PostgreSQL 데이터베이스 버전을 9.2 -> 12.7 로 업그레이드 하는 방법을 찾아보는데 생각보다 내용이 쉽지 않고 대부분 영어로 설명이 되어있더라구요.
업그레이드 과정을 쉽게 공유하면 좋겠다는 생각에 포스팅을 작성해봅니다.
많은 도움이 되길 바라며 :P 아래 내용 잘 따라와주세요!
▶ !!! PostgreSQL 업그레이드 전 필독 !!!
▲ Centos7 운영체제에서 yum을 통해 제공되는 PostgreSQL은 9.2 버전이며 상위 버전의 패키지를 얻기 위해서는 rpm을 통한 설치 필요.
▲ 업그레이드를 위해 기존 PostgreSQL의 data 디렉토리, bin 디렉토리, 그리고 새로 설치될 PostgreSQL의 data 디렉토리, bin 디렉토리 위치 필요.
▲ 충분한 디스크 공간이 확보되었는지 확인 필요.
※ 작업해보니 기존 데이터베이스 크기의 약 2배까지 디스크 공간을 사용함
(기존 데이터베이스 크기가 1.2T 정도였는데 pg_upgrade 돌리는 동안 거의 2.3~4T까지 디스크 공간을 사용함.)
* 아래 내용은 참고용으로 활용해주시고, 개인의 환경에 따라 세부적인 내용은 조정이 필요할 수 있다는 점 항상 염두에 두시길 바랍니다.
▶ Centos7에서 PostgreSQL 9.2 -> 12.7 버전으로 업그레이드하는 방법 소개(rpm 패키지로 업그레이드)
1. 기존 PostgreSQL 클러스터 백업하기(pg_dump)
1) 클러스터 백업 명령어(root권한)
$ pg_dump –U 사용자계정 –Fc –Z 0 —file=덤프파일명 데이터베이스이름
<옵션 설명>
-U : 데이터베이스 사용자 계정을 지정
-Fc : 파일 출력 모드를 사용자 지정 모드(커스텀 모드)로 설정. tar 혹은 text를 사용해야 하는 특별한 이유가 없다면 커스텀 모드를 사용하는 것을 추천.(덤프 크기가 원래 데이터베이스 크기의 3/1 정도로 작고, pg_restore로 복원 작업시 유연하게 활용할 수 있기 때문)
-Z : 덤프 파일 생성시 압축 단계를 지정하는 옵션. 0-9까지 지정할 수 있으면 숫자가 클수록 백업 속도가 느리지만 덤프 크기가 작아지고, 숫자가 작을수록 백업 속도가 빠르고 덤프 크기가 커짐. (지정하지 않을 경우 기본 압축 레벨은 6)
--file= : 덤프 출력 파일명을 지정하는 옵션
2. 기존 PostgreSQL 디렉토리 위치 파악하기
1) bin, data 디렉토리 위치 파악 명령어 입력
(PostgreSQL이 활성화 상태일때 확인 가능)
$ ps -ef | grep postgres
<옵션 설명>
-e : 커널 프로세스를 제외하고 결과 출력
-f : 풀포맷 형식으로 결과 출력(uid, pid, ppid 포함)
2) 결과에서 아래와 같이 bin 디렉토리, data 디렉토리 확인
3. 기존 PostgreSQL 서비스 중지하기
1) PostgreSQL 서비스 중지 명령어(root권한)
$ systemctl stop postgresql.service
4. 새로 설치할 PostgreSQL rpm 다운로드 및 설치
1) 아래 사이트에서 설치할 rpm 패키지 확인
Index of /pub/repos/yum/ (postgresql.org)
Index of /pub/repos/yum/
download.postgresql.org
<하위 디렉토리 및 패키지 선택하는 방법>
/pub/repos/yum/설치할PostgreSQL버전/서버운영체제종류/운영체제버전/rpm파일선택
<Centos7 버전 확인하는 방법>
$ cat /etc/centos-release
<설치할 rpm 파일 종류>
- PostgreSQL 12.7 라이브러리(lib) 패키지
- PostgreSQL 12.7 바이너리 패키지
- PostgreSQL 12.7 도큐먼트(doc) 패키지
- PostgreSQL 12.7 서버(server) 패키지
2) yum install을 통해 PostgreSQL 12.7 rpm 패키지 설치하기(root권한)
$ yum install -y https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7-x86_64/postgresql12-libs-12.7-1PGDG.rhel7.x86_64.rpm
$ yum install -y https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7-x86_64/postgresql12-12.7-1PGDG.rhel7.x86_64.rpm
$ yum install -y https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7-x86_64/postgresql12-docs-12.7-1PGDG.rhel7.x86_64.rpm
$ yum install -y https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7-x86_64/postgresql12-server-12.7-1PGDG.rhel7.x86_64.rpm
3) PostgreSQL 12.7 설치 확인
- data 디렉토리 확인(일반적인 경우)
$ /var/lib/pgsql/12/data/
- bin 디렉토리 확인(일반적인 경우)
$ /usr/pgsql-12/bin/
- 서비스 확인(root권한)
$ systemctl status postgresql-12.service
※ postgresql-12 서비스 상태는 disabled, stop 상태여야 함.
5. 새로운 데이터베이스 초기화하기
1) 데이터베이스 초기화 명령어(root권한)
$ /usr/pgsql-12/bin/initdb -D /var/lib/pgsql/12/data/
※ (필수) 반드시 새로운 데이터베이스 클러스터의 initdb를 사용해 새로운 데이터 디렉토리를 초기화해야함. 기존 데이터베이스의 initdb 사용 금지.
6. 데이터베이스 업그레이드하기(pg_upgrade)
1) pg_upgrade로 데이터베이스 업그레이드(root권한)
$ cd /tmp && /usr/pgsql-12/bin/pg_upgrade --old-datadir 기존data디렉토리 --new-datadir 새로운data디렉토리 --old-bindir 기존bin디렉토리 --new-bindir 새로운bin디렉토리
혹은
$ cd /tmp && /usr/pgsql-12/bin/pg_upgrade -d 기존data디렉토리 -D 새로운data디렉토리 -b 기존bin디렉토리 -B 새로운bin디렉토리
(2개 모두 같은 동작을 의미)
※ pg_upgrade는 업그레이드 작업 중 현재 디렉토리에 postgres 계정으로 log 파일을 생성함. postgres 계정으로 파일을 쓸 수 없는 디렉토리에서 작업하는 경우 pg_upgrade internal.log permission denied 에러가 발생하기 때문에, 이를 방지하기 위해 cd /tmp 명령어 추가.
※ 작업 중 df -h 명령어로 디스크 상태를 수시로 확인하고, 디스크 공간이 부족해지는 일이 없도록 주의.
※ pg_upgrade가 정상적으로 작업을 완료하고나면 현재 디렉토리에 analyze_new_cluster.sh 파일과 delete_old_cluster.sh 파일을 생성함.
※ 작업 중 'FATAL: unrecognized configuration parameter "unix_socket_directory"' 오류 발생시 아래 포스팅 참고하여 트러블 슈팅 후 작업 진행
7. 새로운 데이터베이스 설정 변경하기
1) postgresql.conf 파일 설정하기
- 기존 postgresql.conf 파일과 동일한 내용으로 새로운 postgresql.conf 파일 설정
- 기존 postgresql.conf 파일 수정
$ vi /var/lib/pgsql/data/postgresql.conf
- 새로운 postgresql.conf 파일 수정
$ vi /var/lib/pgsql/12/data/postgresql.conf
2) pg_hba.conf 파일 설정하기
- 기존 pg_hba.conf 파일과 동일한 내용으로 새로운 pg_hba.conf 파일 설정
- 기존 pg_hba.conf 파일 수정
$ vi /var/lib/pgsql/data/pg_hba.conf
- 새로운 pg_hba.conf 파일 수정
$ /var/lib/pgsql/12/data/pg_hba.conf
8. 새로운 데이터베이스 시작하기
1) 새로운 PostgreSQL 서버 시작
$ systemctl start postgresql-12.service
2) 서버가 정상적으로 실행되면, analyze_new_cluster.sh 파일을 실행시켜 데이터베이스 vacuum 진행(root권한)
$ ./analyze_new_cluster.sh
※ 선택 항목, 테이블 크기가 큰 경우 vacuum 시간이 오래 걸릴 수 있기 때문에 여의치 않은 경우 생략.
9. 새로운 데이터베이스 서비스 등록
1) PostgreSQL-12 서비스 등록(root권한)
$ systemctl enable postgresql-12.service
10. 기존 데이터베이스 클러스터 삭제(선택항목)
1) 기존 데이터베이스 삭제(root권한)
$ ./delete_old_cluster.sh
2) 기존 데이터베이스 서비스 삭제(root권한)
$ sudo yum remove 기존설치패키지
내용 관련으로 궁금한점 있으시면 언제든 메일이나 댓글로 남겨주세요 :P
※ 좋아요와 구독은 큰 힘이 됩니다. 감사합니다.
'데이터베이스(PostgrSQL) > 데이터베이스 운영' 카테고리의 다른 글
대규모 DB에 대한 PostgreSQL 12 dump, restore 작업 (PostgreSQL 12 dump, restore for Large database) (4) | 2021.08.20 |
---|---|
PostgreSQL 테이블 Bloat, Bloating(부풀림) 현상 해결(Vacuum) (0) | 2021.08.12 |
댓글