OS 변경설치를 위해 개인적으로 테스트하기 위해 작성한다.

 

1. 테스트 데이터 베이스 생성 및 테스트 계정 생성

먼저 테스트용 서버에 PostgreSQL 13을 설치, 신규 데이터베이스 생성과 신규 계정을 생성한다.

만약 순서가 잘못된다면 권한과 관련해서 조금 많이 꼬여버리니까 주의해야한다. 모든 내용은 psql 명령어로 수행했다. 

# psql 명령어를 이용하여 postgres 계정에 접속
[postgres@82559cbe0973 data]$ psql -h localhost -p 18081
psql (13.16)
Type "help" for help.
postgres=#

# 계정 및 비밀번호 생성
postgres=# create user [계정명] with password '[비밀번호]';
CREATE ROLE

# 데이터베이스 생성 후, 계정 권한 부여
postgres=# create database [데이터베이스명];
CREATE DATABASE

#해당 계정에 해당 데이터베이스의 모든 권한 부여
postgres=# grant all privileges on database [데이터베이스명] to [계정명];
GRANT

#생성 후 exit 로 psql 종료, 신규로 생성한 계정으로 접속
postgres=# exit
[postgres@82559cbe0973 data]$ psql -U [계정명] -d [데이터베이스명] -h localhost -p 18081
psql (13.16)
Type "help" for help.

kimfishs=>

 

2. 신규 테이블 생성 및 데이터 입력

여기서부터는 일반 SQL 쿼리와 크게 다르지 않다. 사실 위의 grant 명령어들도 SQL 이나 다를바 없긴 하지만 뭐...

# 테이블 생성, 해당 테이블에 접속할 계정으로 생성해야 한다
kimfishs=> create table [테이블명] ( [컬럼명] varchar(50) , ... [컬럼명n] varchar (50)) ;
CREATE TABLE

# 테이블에 데이터 입력
kimfishs=> insert into [테이블명] ( id , name ) values ( 'kimfish', '리고기');
INSERT 0 1

# 테이블 데이터 조회
kimfishs=> select * from [테이블명] ;
   id    |  name
---------+--------
 kimfish | 리고기
(1 row)

 

처음에 postgres로 테이블 생성하고 이후에 DBEaver로 신규생성계정으로 접속하니 권한이 없어 select도 못하는 상황이 존재했다. 이후에 권한문제임을 깨닫고 접속 자체를 신규계정으로 접속, create table 명령어를 수행하는 방식으로 재설정했다.

 

3. PostgreSQL 데이터 베이스 백업 및 복구

임시데이터들도 모두 갖춰졌겠다, 이젠 해당 데이터베이스 설정 및 파일들을 모두 tar 압축백업을 할 예정이다.

그리고 신규 서버에 OS 설치 후 이걸 고대로 갖다 놓았을 때 정상적으로 접속이 되는지 확인할 것이다.

 

아마도 PostgreSQL 버전이 같다면 큰 문제 없이 수행되리라 예상하고 있다.

 

일단 PostgreSQL 설정파일 및 데이터베이스 파일이 위치해있는 디렉토리로 이동, tar 압축을 수행한다.

# PostgreSQL의 기본 설정 디렉토리는 /var/lib/pgsql 에 위치해있다
[root@82559cbe0973 lib]# cd /var/lib
[root@82559cbe0973 lib]# ls
alternatives  dnf    misc   private  rpm-state  systemd
dbus          games  pgsql  portables       rpm      selinux    tpm
[root@82559cbe0973 lib]# tar -cvf pgsql_back.tar pgsql
[root@82559cbe0973 lib]# ls
alternatives  dnf    misc   pgsql_back.tar  private  rpm-state  systemd
dbus          games  pgsql  portables       rpm      selinux    tpm

생성된 tar파일을 고대로 다운로드 한 후, 신규 서버에 업로드한다.

 

https://kimfish.tistory.com/361

 

[PostgreSQL13] PostgreSQL 13 설치하기

Docker에 설치된 RockyLinux 8.10 버전에 PostgreSQL 13을 설치 후 데이터 이관 테스트를 진행하려 한다.Docker에서 PostgreSQL 13을 설치할 때에는 몇가지 추가로 설정해줘야 할 것들이 있어 정리할 겸 작성한

kimfish.co.kr

이 내용을 참조하여 신규 서버에 PostgreSQL을 설치한 후, tar 파일을 업로드 한 이후, 다음의 과정을 수행한다.

#자세히 보면 서버가 다르다
[root@93e37f9f73ea lib]# ls
alternatives  dbus  games  misc          private  rpm-state  systemd
dav           dnf   httpd  pgsql_back.tar  portables   rpm      selinux    tpm
[root@93e37f9f73ea lib]#
[root@93e37f9f73ea lib]# tar -xvf pgsql_back.tar
pgsql/
pgsql/.bash_profile
pgsql/.bash_history
pgsql/.psql_history
pgsql/13/
pgsql/13/data/

(중략)

[root@93e37f9f73ea lib]# ls
alternatives  dbus  games  misc   pgsql_back.tar  portables  rpm        selinux  tpm
dav           dnf   httpd  pgsql      private    rpm-state  systemd
[root@93e37f9f73ea lib]# cd pgsql/13/data
[root@93e37f9f73ea data]# ls
PG_VERSION        log           pg_ident.conf  pg_replslot   pg_stat_tmp  pg_wal                postmaster.opts
base              pg_commit_ts  pg_logical     pg_serial     pg_subtrans  pg_xact               postmaster.pid
current_logfiles  pg_dynshmem   pg_multixact   pg_snapshots  pg_tblspc    postgresql.auto.conf
global            pg_hba.conf   pg_notify      pg_stat       pg_twophase  postgresql.conf

# 이전 서버에서 접속포트를 18081로 설정했는데, 그대로 잘 압축해제 되었는지 확인
# 의도적으로 18081 에서 8084로 변경후 실행해본다.

[postgres@93e37f9f73ea data]$ vi postgresql.conf

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
port = 8084                             # (change requires restart)


# PostgreSQL 서버 실행
[postgres@93e37f9f73ea data]$ /usr/pgsql-13/bin/pg_ctl -D /var/lib/pgsql/13/data start
pg_ctl: another server might be running; trying to start server anyway
waiting for server to start....2024-08-21 07:36:04.797 UTC [6143] LOG:  redirecting log output to logging collector process
2024-08-21 07:36:04.797 UTC [6143] HINT:  Future log output will appear in directory "log".
 done
server started

 

뭐 그런데 결과가 당연하게도, 잘 구동 되었다.

 

문제는 기존 PostgreSQL 설정파일의 위치나 데이터베이스 파일, 테이블 스페이스 경로 등이 커스텀화 되지 않았는지 파악하는것이 가장 중요하다.

다음에는 직접 PostgreSQL 서버에 접속 후, 각종 테이블스페이스와 데이터베이스 설정 위치들을 쿼리를 통해 알아볼 예정이다.

 

블로그 이미지

김생선

세상의 모든것을 어장관리

,