UNIX (AIX, LINUX, HP-UX, SOLARIS, ...)/DB

[Linux] CentOS7 PostgreSQL 12 서버 설치

아무일도없었다 2022. 8. 18. 14:16

 

--- 아래의 설치 과정은 root 권한으로 진행하였습니다. ---

 

 

1. uname -a 또는 uname -m 명령어를 통해 아키텍처를 확인한다.

# uname -m
x86_64

 


2. yum 의 respository 에 postgresql 을 추가한다.

 

https://yum.postgresql.org/repopackages/

 

Repo RPMs - PostgreSQL YUM Repository

9.5 RHEL 8 - x86_64, RHEL 7 - x86_64, RHEL 7 - ppc64le, RHEL 6 - x86_64, RHEL 6 - i386, RHEL 5 - x86_64, RHEL 5 - i386

yum.postgresql.org

위의 사이트에서 설치할 환경의 repo rpms 를 확인한다. (x86_64의 경우 CentOS 7 - x86_64 )

 

rpm 을 download 해서 설치하거나

yum install -y pgdg-redhat-repo-latest.noarch.rpm

 

URL 을 사용한 설치를 하면 된다. (URL 이 변경될 가능성이 있으니 위의 사이트에서 확인해야한다.)

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

 


3. yum respository 에 postgresql 이 추가됬는지 확인한다.

 

yum repolist enabled

 

만약 아래와 같은 선택지가 나온다면 y 를 눌러서 Import 해준뒤 다시 확인해보면 된다.

pgdg12/7/x86_64/signature                                                                                                                                                          |  198 B  00:00:00     
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Importing GPG key 0x442DF0F8:
 Userid     : "PostgreSQL RPM Building Project <pgsql-pkg-yum@postgresql.org>"
 Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8
 Package    : pgdg-redhat-repo-42.0-25.noarch (@/pgdg-redhat-repo-latest.noarch)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
Is this ok [y/N]: y

 

아래와 같은 리스트가 나오면 성공이다.

# yum repolist enabled
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
 * epel: ftp.riken.jp
 * extras: mirror.kakao.com
 * updates: mirror.kakao.com
repo id                                                                           repo name                                                                                                         status
base/7/x86_64                                                                     CentOS-7 - Base                                                                                                   10,072
epel/x86_64                                                                       Extra Packages for Enterprise Linux 7 - x86_64                                                                    13,758
extras/7/x86_64                                                                   CentOS-7 - Extras                                                                                                    512
pgdg-common/7/x86_64                                                              PostgreSQL common RPMs for RHEL / CentOS 7 - x86_64                                                                  378
pgdg10/7/x86_64                                                                   PostgreSQL 10 for RHEL / CentOS 7 - x86_64                                                                         1,113
pgdg11/7/x86_64                                                                   PostgreSQL 11 for RHEL / CentOS 7 - x86_64                                                                         1,255
pgdg12/7/x86_64                                                                   PostgreSQL 12 for RHEL / CentOS 7 - x86_64                                                                           856
pgdg13/7/x86_64                                                                   PostgreSQL 13 for RHEL / CentOS 7 - x86_64                                                                           608
pgdg14/7/x86_64                                                                   PostgreSQL 14 for RHEL / CentOS 7 - x86_64                                                                           343
updates/7/x86_64                                                                  CentOS-7 - Updates                                                                                                 4,135
repolist: 33,030

 


4. PostgreSQL12 서버 설치

 

우선 yum install 가능한 목록에 postgresql12 가 있는지 확인해본다.

# yum list | grep postgresql12
postgresql12.x86_64                      12.12-1PGDG.rhel7             pgdg12   
postgresql12-contrib.x86_64              12.12-1PGDG.rhel7             pgdg12   
postgresql12-devel.x86_64                12.12-1PGDG.rhel7             pgdg12   
postgresql12-docs.x86_64                 12.12-1PGDG.rhel7             pgdg12   
postgresql12-libs.x86_64                 12.12-1PGDG.rhel7             pgdg12   
postgresql12-llvmjit.x86_64              12.12-1PGDG.rhel7             pgdg12   
postgresql12-odbc.x86_64                 13.02.0000-1PGDG.rhel7        pgdg12   
postgresql12-odbc-debuginfo.x86_64       12.02.0000-1PGDG.rhel7        pgdg-common
postgresql12-plperl.x86_64               12.12-1PGDG.rhel7             pgdg12   
postgresql12-plpython.x86_64             12.12-1PGDG.rhel7             pgdg12   
postgresql12-plpython3.x86_64            12.12-1PGDG.rhel7             pgdg12   
postgresql12-pltcl.x86_64                12.12-1PGDG.rhel7             pgdg12   
postgresql12-server.x86_64               12.12-1PGDG.rhel7             pgdg12   
postgresql12-tcl.x86_64                  3.0.0-1.rhel7                 pgdg12   
postgresql12-test.x86_64                 12.12-1PGDG.rhel7             pgdg12

 

위의 list 중에서 postgresql12-server 를 설치한다. (yum 이 알아서 의존성 관련 패키지를 찾아서 설치해준다.)

yum install -y postgresql12-server

※ PostgreSQL 서버는 설치시 postgres 계정이 없으면 자동으로 생성한다.

 

 

postgresql12-server 설치가 완료됬다면 /usr/pgsql-12 경로에서 확인이 가능하다.

# ls /usr/pgsql-12
bin  lib  share

 


5. PostgreSQL12 Database setup

 

/usr/pgsql-12/bin 경로에서 postgresql-12-setup 을 통해 Database setup 을 진행한다.

 

# cd /usr/pgsql-12/bin

# ls
clusterdb   dropdb    pg_archivecleanup  pg_config       pg_dump     pg_receivewal  pg_rewind       pg_upgrade  postgres                    postmaster  vacuumdb
createdb    dropuser  pg_basebackup      pg_controldata  pg_dumpall  pg_resetwal    pg_test_fsync   pg_waldump  postgresql-12-check-db-dir  psql
createuser  initdb    pg_checksums       pg_ctl          pg_isready  pg_restore     pg_test_timing  pgbench     postgresql-12-setup         reindexdb

# ./postgresql-12-setup initdb
Initializing database ... OK

 


6. postgresql 서버 설정

 

※ 여기서부터는 postgres 계정으로 진행

 

계정 전환 (root -> postgres)

# su - postgres
-bash-4.2$ whoami
postgres
-bash-4.2$ pwd
/var/lib/pgsql

 

postgresql 원격 접속 설정

 

/var/lib/pgsql/12/data/pg_hba.conf 파일의 # IPv4 local connections: 부분 설정을 아래와 같이 변경

-bash-4.2$ cd /var/lib/pgsql/12/data
-bash-4.2$ vi pg_hba.conf

< pg_hba.conf >

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
host    all             all             0.0.0.0/0               md5

 

/var/lib/pgsql/12/data/postgresql.conf 파일의 listen_addresses 설정을 아래와 같이 변경

-bash-4.2$ cd /var/lib/pgsql/12/data
-bash-4.2$ vi postgresql.conf

 

< 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)

 


7. postgresql 서버 기동

 

PostgreSQL 서비스 등록 (root 권한 필요)

 

OS가 기동될때 자동으로 postgresql 서버를 기동하도록 한다. (os 재부팅이 잦을때 사용하면 좋음, 필수는 아님)

# systemctl enable postgresql-12
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.

 

 

PostgreSQL 기동 및 정지

 

기동 방법에는 root 권한으로 systemctl 을 사용하는 방법과 postgres 계정으로 pg_ctl 을 사용하는 방법이 있다.

둘 중 하나의 방법으로만 사용해야하며, 두개의 방법을 교차해서 사용하면 안된다.

 

< systemctl 을 사용하여 기동 (root) >

# systemctl start postgresql-12

 

< systemctl 을 사용하여 정지 (root) >

# systemctl stop postgresql-12

 

< systemctl 을 사용하여 재기동 (root) >

# systemctl restart postgresql-12

 

※ postgres 계정으로 사용할 경우 PATH 에 /usr/pgsql-12/bin 를 추가하는것이 편리하다.

( 기본적으로 pg_ctl, psql 같은 util path 가 안잡혀있음 )

 

< postgres 계정 PATH 등록 >

-bash-4.2$ cd ~
-bash-4.2$ pwd
/var/lib/pgsql
-bash-4.2$ vi .bash_profile

< .bash_profile 마지막에 아래 내용 추가 >

export PATH=$PATH:/usr/pgsql-12/bin

 

이후 postgres 계정 재접속 또는 source .bash_profile 실행

-bash-4.2$ source .bash_profile 
-bash-4.2$ env | grep PATH
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/pgsql-12/bin

 

 

< pg_ctl 을 사용하여 기동 (postgres) >

-bash-4.2$ pg_ctl start
서버를 시작하기 위해 기다리는 중....2022-08-18 13:52:02.709 KST [9280] 로그:  starting PostgreSQL 12.12 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2022-08-18 13:52:02.712 KST [9280] 로그:  IPv6, 주소: "::1", 포트 5432 번으로 접속을 허용합니다
2022-08-18 13:52:02.712 KST [9280] 로그:  IPv4, 주소: "127.0.0.1", 포트 5432 번으로 접속을 허용합니다
2022-08-18 13:52:02.713 KST [9280] 로그:  "/var/run/postgresql/.s.PGSQL.5432" 유닉스 도메인 소켓으로 접속을 허용합니다
2022-08-18 13:52:02.715 KST [9280] 로그:  "/tmp/.s.PGSQL.5432" 유닉스 도메인 소켓으로 접속을 허용합니다
2022-08-18 13:52:02.744 KST [9280] 로그:  서버 로그를 로그 수집 프로세스로 보냅니다.
2022-08-18 13:52:02.744 KST [9280] 힌트:  이제부터 서버 로그는 "log" 디렉터리에 보관됩니다.
 완료
서버 시작됨

 

< pg_ctl 을 사용하여 정지 (postgres) >

-bash-4.2$ pg_ctl stop
서버를 멈추기 위해 기다리는 중.... 완료
서버 멈추었음

 

< pg_ctl 을 사용하여 재기동 (postgres) >

-bash-4.2$ pg_ctl restart
서버를 멈추기 위해 기다리는 중.... 완료
서버 멈추었음
서버를 시작하기 위해 기다리는 중....2022-08-18 13:52:28.049 KST [9290] 로그:  starting PostgreSQL 12.12 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2022-08-18 13:52:28.049 KST [9290] 로그:  IPv6, 주소: "::1", 포트 5432 번으로 접속을 허용합니다
2022-08-18 13:52:28.049 KST [9290] 로그:  IPv4, 주소: "127.0.0.1", 포트 5432 번으로 접속을 허용합니다
2022-08-18 13:52:28.050 KST [9290] 로그:  "/var/run/postgresql/.s.PGSQL.5432" 유닉스 도메인 소켓으로 접속을 허용합니다
2022-08-18 13:52:28.051 KST [9290] 로그:  "/tmp/.s.PGSQL.5432" 유닉스 도메인 소켓으로 접속을 허용합니다
2022-08-18 13:52:28.085 KST [9290] 로그:  서버 로그를 로그 수집 프로세스로 보냅니다.
2022-08-18 13:52:28.085 KST [9290] 힌트:  이제부터 서버 로그는 "log" 디렉터리에 보관됩니다.
 완료
서버 시작됨

 


Postgresql 서버 접속 확인

 

※ 당연한 소리지만 postgresql 서버를 기동을 먼저 해야한다.

 

 

Local 접속 확인

 

posgres 계정으로 접속후 psql -d postgres 명령으로 db 접속

# su - postgres
-bash-4.2$ psql -d postgres
psql (12.12)
도움말을 보려면 "help"를 입력하십시오.

postgres=#

 

< USER 및 ROLE 확인 >

postgres-# \du
                                롤 목록
 롤 이름  |                      속성                      | 소속 그룹: 
----------+------------------------------------------------+------------
 postgres | 슈퍼유저, 롤 만들기, DB 만들기, 복제, RLS 통과 | {}

 

원격지 접속 확인

 

※ 원격 접속을 하려면 새로운 db user 를 생성하거나 postgres (관리자 계정) 의 password 를 설정해야 한다.

 

< postgres 관리자 계정 password 설정 >

# su - postgres
-bash-4.2$ psql -d postgres
psql (12.12)
도움말을 보려면 "help"를 입력하십시오.

postgres=# alter user postgres with password 'New Password';
ALTER ROLE

 

이후 db 접속 tool 을 사용하여 접속 확인

Test Connection Succeeded

 

반응형

'UNIX (AIX, LINUX, HP-UX, SOLARIS, ...) > DB' 카테고리의 다른 글

[ORACLE] ORA-12547: TNS:lost contact  (0) 2023.01.20