ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CentOS]Install PostgreSQL 9.5
    설치&설정 관련 2017. 7. 5. 11:26
    728x90

    PostgreSQL은 높은 인지도와 많은 인기를 얻는 오픈소스 RDMBS입니다. 

    오랜 역사와 많은 레퍼런스를 가지기 때문에 안정성에서도 많은 신뢰를 얻는 소프트웨어입니다. 

    국내에서는 MySQL을 많이 사용하지만 기업에서 배포하는 방식으로 사용 시 라이선스 문제가 있습니다. 

    Postgresql의 경우 BSD와 MIT와 비슷한 Liberal Open Source License를 따릅니다.


    초기 주요 설정

    초기에 설치되어야 하는 모듈과 설정은 다음과 같습니다.

    max open files 수 조정

    기본 값으로 사용할 경우 운영시 Getting Too many Open files error for Postgres라는 메시지를 볼 수 있습니다. 
    (사용자가 많을 경우 발생합니다.)

    $> vi /etc/security/limits.conf
    
    postgres        soft      nofile        65535
    postgres        hard      nofile        65535
    

    또는 리눅스 커널에서 다음과 같이 설정할 수 있습니다.

    $> vi /etc/sysctl.conf
    
    fs.file-max = 65535
    

    관련 패키지 설치

    PostgreSQL 을 설치 하기 위해서는 다음의 패키지가 꼭 필요 하다.

    • gcc
    • gcc-c++
    • make
    • autoconf
    • readline
    • readline-devel
    • zlib
    • zlib-devel
    • openssl
    • openssl-devel
    • gettext
    • gettext-devel
    • python
    • python-devel
    • wget

    관련 패키지 설치는 yum을 이용합니다.

    $> yum -y install gcc gcc-c++ make autoconf readline readline-devel zlib zlib-devel openssl openssl-devel gettext gettext-devel python python-devel wget
    

    설치 진행

    설치 방법은 2가지 방식이 있습니다. 

    • yum을 이용한 설치
    • Source Compile을 이용한 수동 설치

    yum을 이용한 설치 방법

    1. Repostitory RPM을 설치한다.
    $> yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-x86_64/pgdg-centos95-9.5-2.noarch.rpm
    
    1. Client 패키지를 설치한다.
    $> yum install postgresql95
    
    1. Server 패키지를 설치한다.
    $> yum install postgresql95-server
    

    설치 후 데이터 설정과 자동 시작

    # 데이터 설정
    $> service postgresql-9.5 initdb
    # 위의 명령어가 동작하지 않는 다면, 
    $> /usr/pgsql-9.5/bin/postgresql95-setup initdb
    
    # 서비스 등록
    $> chkconfig postgresql-9.5 on
    # PosgreSQL 시작
    $> service postgresql-9.5 start
    

    Source Compile을 이용한 설치 방법

    PostgreSQL Source Download

    PostgreSQL FIle Browser에서 원하는 버전을 확인한다. 

    $> cd /usr/local/src
    $> wget https://ftp.postgresql.org/pub/source/v9.5.7/postgresql-9.5.7.tar.gz
    $> tar zxvf postgresql-9.5.7.tar.gz
    

    postgres 사용자 생성

    $> useradd -d /home/postgres postgres
    $> passwd postgres
    

    postgres 계정의 .bash_profile 수정

    사용자 환경설정을 진행한다.

    $> su - postgres
    
    $> vi .bash_profile
    

    .bash_profile 파일의 하단에 다음 내용을 추가한다.

    POSTGRES_HOME=/home/postgres/pgsql
    PGLIB=$POSTGRES_HOME/lib
    PGDATA=$POSTGRES_HOME/data
    MANPATH=$MANPATH:$POSTGRES_HOME/man
    
    PATH=$POSTGRES_HOME/bin:$PATH
    
    export PATH
    export POSTGRES_HOME
    export PGLIB
    export PGDATA
    export MANPATH
    
    # I do not know why $PGLIB is not working. 
    # but once some error(.. cannot open shared object...) occured,
    # I have solved this problem with adding below two sentences.
    LD_LIBRARY_PATH=/home/postgres/pgsql/lib
    export LD_LIBRARY_PATH
    

    PostgreSQL 설치

    $> cd /usr/local/src/postgresql-9.5.7
    $> ./configure --prefix=/home/postgres/pgsql --enable-depend --enable-nls=utf-8 --with-python
    
    • 설치 디렉터리 : /home/postgres/pgsql
    • ./configure : 시스템에 맞추어 소스 트리를 설정(설치를 위한 Makefile 생성), 소스파일에 대한 환경 설정 명령어.
    • Configure Opion : http://www.postgresql.org/docs/9.5/static/install-procedure.html
    • Error나 Warning이 뜰 경우 “# yum install gcc bison flex”처럼 패키지 설치 후 재실행.
    $> make
    $> sudo make install
    
    • make : 소스를 컴파일해서 실행 가능한 파일로 생성
    • sudo make install : root 권한으로 make에서 만들어진 실행 가능한 파일을 실행하여 실행

    데이터 디렉터리 추가 및 권한 부여

    $> mkdir -p /home/postgres/pgsql/data
    $> chown -R postgres:postgres /home/postgres/pgsql
    

    PostgreSQL 설정 데이터

    $> /home/postgres/pgsql/bin/initdb -E utf-8 -D /home/postgres/pgsql/data
    
    • -E : 인코딩 언어 셋
    • -D : PostgreSQL 초기 설정 데이터 위치

    PostgreSQL 구동 & 종료

    PorstgreSQL 구동

    $> su - postgres
    $> cd /home/postgres/pgsql/bin
    $> ./postgres -D /home/postgres/pgsql/data &
    # 안될 시,
    $> ./pg_ctl -D /home/postgres/pgsql/data -l logfile start
    

    PostgreSQL 종료

    $> kill `cat /home/postgres/pgsql/data/postmaster.pid | head -1`
    

    초기 설정

    관리자 비밀번호 설정

    $> su - postgresql
    $> psql -dpostgres
    
    postgres=# \password postgres
    Enter new password: [암호 입력]
    Enter it again: [암호 재입력]
    postgres=# \q
    

    로컬 서버에서 암호를 이용한 접속으로 변경

    $> vi pg_hba.conf
    
    # 변경 전
    local	all	all	peer
    #변경 후
    local	all	all	md5
    

    외부 접속 허용

    iptables open

    $> vi /etc/sysconfig/iptables
    
    # 추가
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
    # iptables 재시작
    $> service iptables restart
    

    PostgreSQL 설정 수정

    $> vi /home/postgres/pgsql/data/postgresql.conf
    
    # 변경 전
    listen_addresses = 'localhost'
    # 변경 후
    listen_addresses = '*'
    
    # 변경 전
    #port = 5432
    # 변경 후(주석제거)
    port = 5432
    
    $> vi /home/postgres/pgsql/data/pg_hba.conf
    
    # 보통은 특정 대역을 표기 예 : `192.168.0.0/24`
    # 추가 - 전체 접근 가능하도록 수정
    host	all	all	0.0.0.0/0	password
    
    • 변경 내역의 반영을 위하여 PostgreSQL 재기동 필요

    DB, 사용자 추가 & 설정

    Database 생성 & 조회

    $> su - postgres
    $> /home/postgres/pgsql/bin/createdb [데이터베이스명]
    $> /home/postgres/pgsql/bin/psql
    
    # SQL을 이용한 데이터베이스 생성 옵션 
    CREATE DATABASE name
     [ [ WITH ] [ OWNER [=] user_name ]
     [ TEMPLATE [=] template ]
     [ ENCODING [=] encoding ]
     [ LC_COLLATE [=] lc_collate ]
     [ LC_CTYPE [=] lc_ctype ]
     [ TABLESPACE [=] tablespace_name ]
     [ CONNECTION LIMIT [=] connlimit ] ]
    
    # 모든 데이터 베이스 목록 표출
    postgres=# \l+
    
    # 데이터 베이스 선택
    postgres=# \c [데이터베이스 명]
    
    # 테이블 목록 표출
    postgres=# \d
    

    테이블 스페이스 생성

    # linux에서 tablespace로 사용할 디렉터리 생성
    $> mkdir /home/postgres/tablespace
    $> /home/postgres/pgsql/bin/psql
    
    # 여러 테이블 스페이스 추가 가능
    postgres=# create tablespace data_tablespace owner sys location '/home/postgres/tablespace';
    
    #테이블 스페이스 생성 확인
    postgres=# select * from pg_tablespace;
    

    사용자 추가

    # 사용자 추가
    $> /home/postgres/pgsql/bin/createuser [아이디]
    
    # 비밀번호 변경
    $> /home/postgres/pgsql/bin/psql
    postgres=# alter user [아이디] with encrypted password '[비밀번호]';
    
    # 제한된 권한만 부여 가능 예) grant connect, temp on database [데이터베이스 명] to [아이디]
    # DB 권한 부여
    postgres=# grant all privileges on database [데이터베이스 명] to [아이디];
    

    backup & restore

    # 백업
    $> /home/postgres/pgsql/bin/pg_dumpall -U postgres -f [백업 파일명]
    
    #복구
    $> /home/postgres/pgsql/bin/psql -U postgres -f [백업 파일명]
    

    참고 자료

    PosgreSQL Linux Downloads

    PostgreSQL 수동 설치

    한눈에 살펴보는 PostgreSQL

    Getting Too many Open files error for Postgres

    읽기전용 POSTGRESQL 튜닝



    728x90
Designed by Tistory.