티스토리 뷰

(구글에서 'linux postgresql'을 검색하면 가장 먼저 나오는 글입니다. Tutorial이 잘 구성되어 있습니다.)
(정리가 잘 되어 있습니다.)

nxserver 무료버전 설치하려다가 잘 안돼서 나중에 하기로 하고, 그냥 putty로 작업하기로 했습니다. Windows에 PostgreSQL을 설치할 때는 설치마법사를 따라서 쭉 설치하면 되는데, Linux 에서 사용하려니 막막하더군요. 일단 설치는 간단합니다. RHEL 저장소에 PostgreSQL이 있으니 yum을 이용해서 설치하면 됩니다. 일단 yum 명령어를 사용해서 PostgreSQL 을 설치하고 나면, postgres 라는 사용자가 생성되며, /var/lib/pgsql 에 기본 data 폴더가 생성됩니다. 그리고 /etc/rc.d/init.d/ 에 가보면, postgresql 이라는 이름의 스크립트 파일이 있습니다. 기본 폴더를 사용하시지 않는다면 이 스크립트 파일을 수정해주면 됩니다. 

연구실에서 새로 구입한 서버에는 레드햇 서버가 설치되어 들어왔는데, 기본 파일 시스템은 적게 잡혀있고, 나머지 부분은 마운트 되지 않은 상태였습니다. 나머지 부분을 마운트 하고 그곳에 PostgreSQL 서버의 데이터 폴더를 만들기로 했습니다. 

[root@pearl sjlee] grep postgres /etc/passwd
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
위와 같이 해보면, postgres 사용자에 대한 정보를 볼 수 있습니다. X window 상에서는 system-config-users 를 사용하시면 더 쉽게 하실 수 있습니다.  어쨌든 차례대로 사용자 ID, 암호 필드, UID, GID, 이름, 홈디렉토리의 위치, 사용쉘을 나타냅니다. 저의 경우에는 /data/pgsql 를 postgres 사용자의 홈폴더로 사용하고 /data/pgsql/data 폴더를 데이터가 저장되는 디렉터리로 사용하도록 하겠습니다.
[root@pearl sjlee] cd /data
[root@pearl sjlee] su postgres
bash-3.2$ mkdir pgsql
bash-3.2$ cd pgsql
bash-3.2$ cp /var/lib/pgsql/.bash_profile ./
bash-3.2$ exit
[root@pearl sjlee] /usr/sbin/usermod -d /data/pgsql
/data/pgsql 디렉터리를 postgres 사용자 소유로 만들고 원래 홈디렉터리에 있던 .bash_profile을 새로 만든 디렉터리로 복사해옵니다. 그리고 .bash_profile 을 열어보면 다음과 같이 PGDATA 환경변수를 지정하고 있는데, 이 환경변수는 PostgreSQL의 데이터 디렉터리를 지정하므로, 새로 만들 데이터 디렉터리인 /data/pgsql/data 로 되어있는지 확인합니다.
[ -f /etc/profile ] && source /etc/profile

PGDATA=/data/pgsql/data
export PGDATA
이제 initdb 툴을 사용해서 데이터베이스를 초기화합니다.
bash-3.2$ initdb -D /data/pgsql/data
이 데이터베이스 시스템에서 만들어지는 파일들은 그 소유주가 "postgres" id로
지정될 것입니다. 또한 이 사용자는 서버 프로세스의 소유주가 됩니다.

데이터베이스 클러스터는 ko_KR.UTF-8 로케일로 초기화 될 것입니다.
기본 데이터베이스의 UTF8 인코딩은 설정되었습니다.

data 디렉토리 만드는 중 ...완료
data/global 디렉토리 만드는 중 ... 완료
data/pg_xlog 디렉토리 만드는 중 ... 완료
data/pg_xlog/archive_status 디렉토리 만드는 중 ... 완료
data/pg_clog 디렉토리 만드는 중 ... 완료
data/pg_subtrans 디렉토리 만드는 중 ... 완료
data/pg_twophase 디렉토리 만드는 중 ... 완료
data/pg_multixact/members 디렉토리 만드는 중 ... 완료
data/pg_multixact/offsets 디렉토리 만드는 중 ... 완료
data/base 디렉토리 만드는 중 ... 완료
data/base/1 디렉토리 만드는 중 ... 완료
data/pg_tblspc 디렉토리 만드는 중 ... 완료
max_connections 초기값을 선택하는 중 ...100
shared_buffers 초기값을 선택하는 중 ...1000
환경설정 파일을 만드는 중 ...완료
data/base/1 안에 template1 데이터베이스를 만드는 중 ...완료
initializing pg_authid ... 완료
시스템 테이블들을 위한 제한 없는 로우 크기를 활성화 하고 있음 ...완료
initializing dependencies ... 완료
시스템 뷰들을 만드는 중 ... 완료
pg_description 자료 입력 중 ...완료
인코딩 변환규칙(conversion)들을 만드는 중 ...완료
내장객체들의 접근 권한을 설정 중 ... 완료
information schema 만드는 중 ...완료
template1 데이터베이스 vacuum 작업 중 ...완료
template1 데이터베이스를 template0 데이터베이스로 복사 중 ...완료
copying template1 to postgres ... 완료

경고: 로컬 연결의 인증 방법을 "trust" 방식을 지정했습니다.
이 값을 바꾸려면, pg_hba.conf 파일을 수정하든지,
다음번 initdb 명령을 사용할 때, -A 옵션을 사용해서 인증방식을 지정할 수 있습니다.

Success. You can now start the database server using:

    postmaster -D data
or
    pg_ctl -D data -l logfile start
데이터 디렉터리를 초기화하고 나면, 'postmaster -D /data/pgsql/data' 와 같은 명령어로 PostgreSQL Server를 실행할 수 있는데요, 서버가 시작될 때마다 매번 실행시킬 것이기 때문에 PostgreSQL 서버 데몬의 초기화 스크립트를 수정하겠습니다. /etc/rc.d/init.d 에 가면 'postgresql' 이라는 이름으로 초기화 스크립트가 있습니다. 'vi postgresql' 해서 스크립트를 열어보면, PostgreSQL backend daemon 을 시작하고 종료하는 스크립트라는 설명이 있고, 쭈욱 내려가 보면, 아래와 같은 부분이 있습니다.
# Set defaults for configuration variables
PGENGINE=/usr/bin
PGPORT=5432
PGDATA=/var/lib/pgsql
if [ -f "$PGDATA/PG_VERSION" ] && [ -d "$PGDATA/base/template1" ]
then
        echo "Using old-style directory structure"
else
        PGDATA=/var/lib/pgsql/data
fi
PGLOG=/var/lib/pgsql/pgstartup.log
저는 다음과 같이 PGDATA와 PGLOG 를 수정하였습니다.
# Set defaults for configuration variables
PGENGINE=/usr/bin
PGPORT=5432
PGDATA=/data/pgsql
if [ -f "$PGDATA/PG_VERSION" ] && [ -d "$PGDATA/base/template1" ]
then
        echo "Using old-style directory structure"
else
        PGDATA=/data/pgsql/data
fi
PGLOG=/data/pgsql/pgstartup.log
저장하고 파일을 닫고, 이제 PostgreSQL 서버의 설정을 수정하겠습니다. PostgreSQL 서버의 설정 파일에는 postgresql.conf, pg_hba.conf, pg_ident.conf 등이 있습니다.  이중에서 pg_hba.conf 가 PostgreSQL Client Authentication Configutation 파일입니다. 이 파일을 열어보니, PostgreSQL documentation의 "Client Authentication" Section을 참조하라고 되어 있네요. 
제 PC에서 pgAdmin을 사용하는게 편리하기 때문에, 보안상 문제가 있지만, 원격에서 postgres 로그인 롤로 접속할 수 있도록 설정 파일을 수정하도록 하겠습니다.
외부에서 네트워크를 통해 접속하려면 먼저 postgresql.conf의 설정을 확인해야 합니다. postgresql.conf 파일을 열어서 'CONNECTION AND AUTHENTICATION' 부분을 찾습니다.
#---------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#---------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'          # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost', '*' = all
#port = 5432
max_connections = 100
그 중에서 listen_addresses = '*' 으로 설정되었는지 확인합니다. 이 설정에서는 어떤 ip로부터 오는 접속에 응답 대기할 것인가를 지정합니다.
그 다음에 pg_hba.conf 파일을 열어서 수정해주어야 합니다. 이 파일에서는 어떤 호스트에 접속을 허용할 것인지와 접속 방법을 지정합니다. 저는 host all all 172.16.164.213/32 이렇게 추가해 주었는데, 제 pc의 ip인 172.16.164.213/32 에서의 모든 연결과 사용자에 대해 신뢰한다는 것입니다. 이렇게 설정해주고, '/usr/bin/pg_ctl -D /data/pgsql/data restart' 와 같은 명령어로 서비스를 시작해줍니다. 

여기까지하면 172.16.164.213 ip address 를 갖는 제 pc에서 pgAdmin 을 사용해서 postgres 아이디로  원격으로 접속할 수 있습니다. postgres 에는 암호가 설정되어 있지 않아 trust 로 설정되어 있을 경우 데이터베이스에 접속할 수 있습니다. pgAdmin에서 새로운 로그인 아이디를 만든 후에, 원격에서는 이 아이디로만 접속할 수 있도록 설정을 변경하시는 것도 좋을 것 같습니다. 


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함