저번 포스팅에 이어서 두번 째 내용이다.
기존에 쓰던 서버는 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 경로에 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 를 생성하게 되면
이 경로에 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 또한 이관이 잘 된 것을 확인할 수 있다.
'개발자노트 > 혼자 끄적끄적' 카테고리의 다른 글
안드로이드 스튜디오 배포 중 오류 (0) | 2024.11.19 |
---|---|
인텔리제이 한글 깨짐 ( 인코딩 문제 ) (0) | 2024.05.16 |
리액트 - 범위 슬라이더 (0) | 2023.03.28 |
인텔리제이 커뮤니티 ( IntelliJ Community) 에서 스프링부트 + npm + node.js + 리엑트 환경 실행 (0) | 2023.01.04 |
기술면접 준비 각 키워드 (0) | 2022.10.30 |