본문 바로가기

개발자노트/혼자 끄적끄적

우분투 , RockyOS postgresql db 이관하기 버전이 다른 postgresql 2개 서비스하기

 저번 포스팅에 이어서 두번 째 내용이다.

기존에 쓰던 서버는 ubuntu 이고, 새로운 서버는 RockyOS 이다.

현재 RockyOS에는 postgres 14 버전으로 DB가 구성되어있는 상태이기 때문에,

database를 추가하면 되지만 , 서비스 장애가 있을 시 다른 프로젝트에 지장이 생기면 불편할 것 같기도 하고 (이중화),

현재 운영중인 서버와 싱크를 맞추기 위해 그대로 10버전을 채택하기로 결정하였다.

 

환경1 (legacy) :
- ubuntu 20.04.5 LTS
- postgresql : 10

환경2 (new) :
- RockyOS 8
- postgresql : 10
- postgresql : 14

 

 

 우선 , RockyOS에는 dnf 라는 패키징 관리도구 명령어가 있어서, 이를 통해 postgresql을 설치하였다.

그리고 RockyOS 8 버전 같은 경우에는 기본적으로 postgresql-server 10 버전 패키징 파일이 존재하는 것 같다.

이것을 모르고 삽질을 되게 오래 했는데

14 버전은 기본 패키징이 아니라서 dnf를 다운할 때 종속성 확인을 위해서

dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

 

 

다음과 같은 Repository를 연결 한 후 ,

dnf module list postgresql

 

 

다음과 같은 명령어를 작성하게 되면

모듈 리스트

이런식으로 현재 dnf 로 install 가능한 목록을 확인할 수 있는데, 이미 나는 아래와 같은 방법으로 14를 설치해서 

Repository 추가
1. dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

RockyOS8에 추가돼있는 기본 postgresql 모듈 사용중지
2. dnf -qy module disable postgresql 

Postgressql 14 설치
3. dnf install -y postgresql14-server

 

 

/var/lib/pgsql

/var/lib/pgsql 경로에 14라는 폴더 안에 데이터 파일이 세팅되어 있는 반면에,

10버전을 설치를 하였는데도 10이라는 폴더는 생성되지 않는 것이다.

버전을 지정해서 10을 깔아도 설치가 되었다고만 하지 어느 경로에 있는지 모르겠었다.

 

 

 

원래였으면 , 이런식으로 pgsql-10 이던 , pgsql-버전 이런식으로 경로에 파일들이 존재해야하는데 

pgsql-14는 존재하지만 , pgsql-10은 존재하지 않는 것을 볼 수 있다.

왜 없을까 설치가 제대로 안됐나? 무엇이 문제인지 계속 애꿎은 install만 몇십번을 해본 것 같다.

 

원래 initdb를 하게 된다면

/usr/pgsql-10/bin/postgresql-10-setup initdb

이런식으로 initdb를 실행할텐데, pgsql-10은 없기 때문에 당연히 명령어가 실행 되지 않을것이다.

 

저 setup을 하려는 initdb가 어떻게 실행되는지 몰라서 파일로 존재는 하는지 find 명령어로 검색을 해보았다.

sudo find / -name initdb

버전을 지정해서 설치했던 14버전같은 경우에는 많은 방법들에 나와있던 /usr/pgsql-버전/bin 안에 존재하는 것을

확인 할 수 있었고 , 내가 설치하려던 10버전은 왠지 /usr/bin 에 있는 것 같았다.

 

 

 추측하건데, pgsql10 버전은 RockyOS에서 따로 종속성을 등록할 필요 없이 내장(?) 이 되어있어서, 설치만 하면 기본 경로로 설치가 되버려서 그런 것 같다.

 

 

그래서 다음과 같은 과정으로

1. sudo dnf install postgresql-server

2. /usr/bin/postgresql-setup --initdb

 

 

 postgresql database cluster 를 생성하게 되면 

/var/lib/pgsql

 

 이 경로에 data 라는 디렉토리가 만들어진 것이고,

이것이 postgresql 10 버전의 base 디렉토리가 된 것이였다.

 

 

기본적으로 생성되는 경로에 data 디렉토리가 생기다 보면, / 즉 루트경로로 생성이 되는 것인데,

통상적으로 루트 경로에 많은 용량을 할당하지 않기에, 데이터가 많아지면 용량이 부족할 것이라 생각해 삭제를 해주고

postgresql.service의 경로를 찾아준 뒤, 

 

 

vi 편집기를 이용해 열어서

 

 

Environment=PGDATA=/데이터파일을 만들 디렉토리경로

ex) Environment=PGDATA=/userData/postgresData/10/data

이런식으로 경로를 설정해주고

 

 

systemctl daemon-reload

/usr/bin/postgresql-setup --initdb


* 아래와 같이 경로를 지정할 수 있다.
#
sudo -i -u postgres
#
initdb -D /userData/postgresData/10/data -U postgres


* 단 현재 postgres는 14버전을 먼저 인식해서 10버전을 기준으로 init해야해서
#
/usr/bin/initdb -D /userData/postgresData/10/data
이런식으로 사용해줘야한다.

 

service가 수정되었으니 , daemon-reload 후 initdb 하게 되면 ,

 

 

다음과 같이 data 디렉토리 안에 파일들이 init 된 것을 볼 수 있다.

 

 

그 후

sudo systemctl start postgresql

 

 

를 통해 postgresql을 실행하게 되면 사용이 가능한데, 이 때 port 가 충돌 날 수도 있으니 , 

 

 

data_directory를 지정해주고, listen_addresses 는 외부 ip 가 다 접속할 수 있게 *로 공개 하고,

port는 기존 5432를 사용하고 있어, 5433로 지정해주었다.

 

 

그 후 , 이전 db를 사용할 것이라 pg_hba.conf 파일과 postgresql.conf 는 수정해논 것으로 해놓고, 나머지 파일은 그대로 압축을 풀고 service 를 재시작 하면 db와 user 들이 옮겨진 것을 확인 할 수 있다.

혹시 서비스를 재시작해도 directory 가 인식이 되지 않는다면

sudo -u postgres pg_ctl -D /userData/postgresData/10/data reload

 

리로드 해준다.

 

 

 그리고 이제 psql에 접속해서 db를 확인을 어떻게 하나 생각을 해봤는데.. 원래면

sudo -i -u postgres
psql

이렇게 접속을 하면 됐는데, 먼저 설치한 14버전으로만 접속이 되는 것이다.

 

 

 그럼 어떻게 해야 10버전을 접속할 수 있을까..

생각을 해보다가 conf에 설정한 포트로 접속을 하면 되지 않을까 생각을 하게 돼서 다음과 같이 포트로 접속해보니

psql -p 5433

다행히 psql 10 버전으로 접속이 된 것을 확인 할 수 있었고,

 

 

 

(우분투 legacy 서버)

 

( RockyOS new server )

 

다음과같이 , database와 user 또한 이관이 잘 된 것을 확인할 수 있다.