mariadb-10.0.15 CentOS 7 소스
CentOS 7 를 위한 mariadb-10.0.15 버전 입니다. 10.0.14 버전의 보안 패치를 적용하고 systemd 를 위한 스크립트가 포함되어 있습니다.
다운로드: http://linux.systemv.pe.kr/files/mariadb-10.0.15.tar.gz
설치방법: Mariadb 10 소스 설치
Database 글을 모아 놓은 카테고리
CentOS 7 를 위한 mariadb-10.0.15 버전 입니다. 10.0.14 버전의 보안 패치를 적용하고 systemd 를 위한 스크립트가 포함되어 있습니다.
다운로드: http://linux.systemv.pe.kr/files/mariadb-10.0.15.tar.gz
설치방법: Mariadb 10 소스 설치
MariaDB 10 버전이 올라가면 기능이 향상되는데, TIMESTAMP 와 DATETIME 의 데이터 타입(Data Type)을 사용하는 컬럼에 경우 Update, Insert 시에 몇가지 기능이 향상되었습니다.
1 2 3 4 5 6 |
CREATE TABLE test_date ( a INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); |
여기서 주목해야 할 것은 ‘created TIMESTAMP DEFAULT CURRENT_TIMESTAMP‘와 ‘updated TIMESTAMP ON UPDATE CURRENT_TIMESTAMP‘ 입니다.
1 2 3 4 5 6 7 8 9 10 |
desc test_date; +---------+------------------+------+-----+---------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +---------+------------------+------+-----+---------------------+-----------------------------+ | a | int(10) unsigned | NO | PRI | NULL | auto_increment | | b | int(11) | YES | | NULL | | | created | timestamp | NO | | CURRENT_TIMESTAMP | | | updated | timestamp | NO | | 0000-00-00 00:00:00 | on update CURRENT_TIMESTAMP | +---------+------------------+------+-----+---------------------+-----------------------------+ 4 rows in set (0.01 sec) |
Default와 Extra 컬럼에 내용을 자세히 보십시오.
여기서 Insert 를 다음과 같이 합니다.
1 2 3 4 5 6 7 8 9 10 |
root@localhost:test 16:40:38> INSERT INTO test_date SET b=1; Query OK, 1 row affected (0.02 sec) root@localhost:test 16:41:38> SELECT * FROM test_date; +---+------+---------------------+---------------------+ | a | b | created | updated | +---+------+---------------------+---------------------+ | 1 | 1 | 2014-10-26 16:41:38 | 0000-00-00 00:00:00 | +---+------+---------------------+---------------------+ 1 row in set (0.00 sec) |
‘created’ 컬럼에 자동으로 시간이 등록됩니다. 과거에는 다음과 같이 해줬어야 했습니다.
1 |
INSERT INTO test_date SET b=1, created=now(); |
‘now()’ 함수를 사용해서 했어야 했지만 Mariadb 10 에서 TIMESTAMP 타입을 이용해서 컬럼을 정의하면 더 손쉽게 자동으로 처리를 해줍니다.
다음과 같이 Update 를 해봅니다.
1 2 3 4 5 6 7 8 9 10 11 |
mysql> UPDATE test_date SET b = b+1; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM test_date; +---+------+---------------------+---------------------+ | a | b | created | updated | +---+------+---------------------+---------------------+ | 1 | 2 | 2012-06-12 17:07:20 | 2012-06-12 17:11:48 | +---+------+---------------------+---------------------+ 1 row in set (0.00 sec) |
update 필드에 값이 자동으로 시간이 업데이트 됩니다. DATETIME 도 이와 같은데 다른점은 값이 없을 경우 ‘NULL’이 됩니다.
1 2 3 4 5 6 |
CREATE TABLE test_date2 ( a INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, b INT, created DATETIME DEFAULT CURRENT_TIMESTAMP, updated DATETIME ON UPDATE CURRENT_TIMESTAMP ); |
test_date2 를 만들고 다음과 같이 실행보면 값이 없을때는 NULL이 들어 갑니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
root@localhost:test 16:46:45>INSERT INTO test_date2 SET b=1; Query OK, 1 row affected (0.02 sec) root@localhost:test 16:47:34>select * from test_date2; +---+------+---------------------+---------+ | a | b | created | updated | +---+------+---------------------+---------+ | 1 | 1 | 2014-10-26 16:47:34 | NULL | +---+------+---------------------+---------+ 1 row in set (0.00 sec) root@localhost:test 16:47:42>UPDATE test_date2 SET b = b+1; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 root@localhost:test 16:48:05>select * from test_date2; +---+------+---------------------+---------------------+ | a | b | created | updated | +---+------+---------------------+---------------------+ | 1 | 2 | 2014-10-26 16:47:34 | 2014-10-26 16:48:05 | +---+------+---------------------+---------------------+ 1 row in set (0.00 sec) |
MariaDB 는 MySQL 의 오픈소스 버전 입니다. MySQL 를 최초로 개발한 사람이 점점 폐쇄성이 짙어가는 MySQL 을 대체하기 위해 MySQL 을 복제하고 기능을 개선한 MySQL 의 또 다른 버전 입니다.
현재 MariaDB 는 10.0.14 버전 입니다. MariaDB 10 소스 설치를 해보겠습니다. 설치 환경은 다음과 같습니다.
MariaDB 10.0.14 버전은 MariaDB 홈페이지에서 다운받을 수 있습니다. 그런데, 이 소스 버전을 가지고 설치를 할 수도 있지만, Fedora 배포판에서 패치한 버전을 가지고 설치를 해보겠습니다.
Fedora 배포판의 경우에 10.0.14 버전에 보안 패치나 경로에 대한 패치 그리고 CentOS 7 의 Systemd 를 지원하도록 하는 스크립트를 제공 합니다. 이것은 SRPM 을 다운받아 소스를 패치하는 방법을 썼습니다.
MariaDB 는 cmake 를 이용하기 때문에 일반 Configure 와는 다르게 이것을 이용 합니다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# 64bit 를 위한 설정. export CFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fPIC -fno-delete-null-pointer-checks' export CXXFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fPIC -fno-delete-null-pointer-checks' export LDFLAGS=' -pie -Wl,-z,relro,-z,now' # cmake 를 이용한 configure cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-10.0.14 \ -DINSTALL_SYSCONFDIR=/usr/local/mariadb-10.0.14/etc \ -DINSTALL_SYSCONF2DIR=/usr/local/mariadb-10.0.14/etc/my.cnf.d \ -DINSTALL_DOCDIR=share/doc/mariadb-10.0.14 \ -DINSTALL_DOCREADMEDIR=share/doc/mariadb-10.0.14 \ -DINSTALL_INCLUDEDIR=include/mysql \ -DINSTALL_INFODIR=share/info \ -DINSTALL_LIBDIR=lib64/mysql \ -DINSTALL_MANDIR=share/man \ -DINSTALL_MYSQLSHAREDIR=share/mariadb \ -DINSTALL_MYSQLTESTDIR=share/mysql-test \ -DINSTALL_PLUGINDIR=lib64/mysql/plugin \ -DINSTALL_SBINDIR=libexec \ -DINSTALL_SCRIPTDIR=bin \ -DINSTALL_SQLBENCHDIR=share \ -DINSTALL_SUPPORTFILESDIR=support-files \ -DMYSQL_DATADIR=/usr/local/mariadb-10.0.14/data \ -DTMPDIR=/usr/local/mariadb-10.0.14/tmp \ -DMYSQL_UNIX_ADDR=/var/lib/mariadb/mariadb.sock \ -DPID_FILE_DIR=/var/run/mariadb \ -DDAEMON_NAME=mariadb \ -DENABLED_LOCAL_INFILE=ON \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_JEMALLOC=no \ -DWITH_ARIA_STORAGE_ENGINE=ON \ -DUSE_ARIA_FOR_TMP_TABLES=ON \ -DWITH_PARTITION_STORAGE_ENGINE=ON \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=ON \ -DWITH_QUERY_CACHE_INFO=ON \ -DWITH_QUERY_RESPONSE_TIME=ON \ -DWITH_SAFEMALLOC=AUTO \ -DWITH_XTRADB_STORAGE_ENGINE=ON \ -DWITH_LOCALES=ON \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all # 컴파일 make # 설치 make install |
위 설정은 다음과 같은 주요한 기능을 가집니다.
Fedora 배포판의 설정중에 디렉토리 설정 부분을 많이 인용을 했기 때문에 기존의 컴파일 설치한 디렉토리와는 사뭇 다릅니다. 대부분의 소스 컴파일을 설치했을 때에는 대부분 설치할 디렉토리인 PREFIX 만 지정하기 때문에 벤치디렉토리, 서포트디렉토리등이 모드 PREFIX 이하에 놓입니다. 하지만 위 설정을 보시면 Fedora 배포판 호환인 RedHat 디렉토리 구조를 계승하고 있다는 것을 인지하시기 바랍니다.
설치가 끝난 후에는 수동으로 옮겨주어야할 파일들이 존재 합니다. 그래서 설치 후 작업을 다음과 같이 진행 합니다.
1 2 3 4 5 6 7 8 9 10 |
# mariadb systemd에 파일 설치. install -D -p -m 644 scripts/mysql.service /usr/lib/systemd/system/mariadb.service # mariadb tmpfiles.d에 파일 설치. install -D -p -m 0644 scripts/mysql.tmpfiles.d /usr/lib/tmpfiles.d/mariadb.conf # mysql 호환을 위한 systemd에 파일 설치. install -p -m 644 scripts/mysql-compat.service /usr/lib/systemd/system/mysql.service mkdir -p /usr/lib/systemd/system/mariadb.service.d install -p -m 644 scripts/mysql-compat.conf /usr/lib/systemd/system/mariadb.service.d/mysql-compat.conf # 활성화하기. systemctl enable mariadb |
CentOS 7 데서부터 도입된 systemd 등록을 위한 파일들을 설치 합니다.
그리고 다음과 같이 스크립트 파일들을 복사해 줍니다.
1 2 3 4 5 |
install -p -m 755 scripts/mysql-prepare-db-dir /usr/local/mariadb-10.0.14/libexec/mysql-prepare-db-dir install -p -m 755 scripts/mysql-wait-ready /usr/local/mariadb-10.0.14/libexec/mysql-wait-ready install -p -m 755 scripts/mysql-check-socket /usr/local/mariadb-10.0.14/libexec/mysql-check-socket install -p -m 755 scripts/mysql-check-upgrade /usr/local/mariadb-10.0.14/libexec/mysql-check-upgrade install -p -m 644 scripts/mysql-scripts-common /usr/local/mariadb-10.0.14/libexec/mysql-scripts-common |
이제 mariadb 를 운영하기 위한 계정을 생성해 주고 디렉토리 퍼미션을 조정해 줍니다.
1 2 3 4 5 6 7 8 9 |
# MariaDB 사용을 위한 시스템 계정 생성. /usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 /usr/sbin/useradd -M -N -g mysql -o -r -d /usr/local/mariadb-10.0.14/data -s /sbin/nologin -c "MariaDB Server" -u 27 mysql >/dev/null 2>&1 # 디렉토리 소유권을 바꿔 줍니다. chown -R mysql /usr/local/mariadb-10.0.14/data chgrp -R mysql /usr/local/mariadb-10.0.14 mkdir /usr/local/mariadb-10.0.14/tmp mkdir /usr/local/mariadb-10.0.14/logs chown mysql: /usr/local/mariadb-10.0.14/tmp /usr/local/mariadb-10.0.14/logs |
이렇게 한 후에 다음과 같이 MariaDB 에 기본 데이터베이스들을 생성해 줍니다.
1 2 3 4 5 6 7 |
# 심볼릭 링크 만들기. cd /etc ln -s /usr/local/mariadb-10.0.14/etc/my.cnf ln -s /usr/local/mariadb-10.0.14/etc/my.conf.d # mysql_install_db 실행 cd /usr/local/mariadb-10.0.14/ ./bin/mysql_install_db --user=mysql |
이제 다 되었습니다. systemd 를 이용해서 mariadb 를 시작하면 됩니다.
1 2 |
# Mariadb 시작. systemctl start mariadb |
MariaDB 는 한 개발자의 노력을 시작된 오픈 소스 프로젝트 입니다. 과거 오픈 소스 데이터베이스의 대명사인 MySQL 을 개발한 개발자 중에 한인 Monty Widenius. 1962년 핀란드 태생으로 1995년 MySQL 데이터베이스를 개발하기 시작해서 그 이듬해에 첫 릴리즈를 하게 됩니다. 그리고 1998년, 3.21 버전부터 www.mysql.com 을 만들어 운영하면서 명실상부한 오픈 소스 데이터베이스로 발을 딛기 시작 합니다.
MySQL은 오픈소스 정책을 가지고 있지만 개발과 판매등을 총괄하는 회사가 있습니다. MySQL AB 라는 회사인데, 개발지원에서부터 판매, 홍보까지 MySQL에 거의 모든것을 관장하던 회사입니다. MySQL이 오픈소스이긴 하지만 라이센스정책이 이중으로 되어있어(GPL, CopyRight) 이러한 라이센스 관련해서 제품의 구성등 전반적인 부분도 이 회사에서 모두 관리합니다.
MySQL이 오픈소스 진영에서 이름을 날리고 있던 2008년에 썬 아킥텍쳐 및 썬 OS로 유명한 ‘Sun microsystems’ 에 85억 달러에 인수 됩니다. 이때에 MySQL을 전부 총괄하던 MySQL AB 회사도 함께 넘어감으로써 모든 지적재산권도 썬으로 넘어가게 됩니다. 그러던 것이 1년도 않된 시점인 2009년 4월 오라클이 썬마이크로시스템즈를 인수함으로써 MySQL AB 의 모든 지적재선권은 다시 오라클로 넘어갑니다.
Oracle. 오픈소스 진영에서는 거의 악날함을 자주 보여줬던 RDBMS 최강의 회사 입니다. 상용시장에서 독보적인 오라클 데이터베이스 를 가지고 있었고 인수전에는 MySQL과 알게 모르게 경쟁하던 데이터베이스 제품을 가진 회사였기 때문에 인수당시부터 오픈소스진영에서는 MySQL에 대한 운명(?)에 대해서 우려하는 목소리가 많았습니다. ‘오라클 스럽게 죽일거다’라는 소리가 자주 들렸지요.
그런데, MySQL AB를 설립했던 Michael “Monty” Widenius(마이클 ‘몬티’ 비드니우스) 라는 사람이 오라클을 뛰쳐 나옵니다. 오픈소스 정의감으로 뛰쳐나왔으면 드라마틱하겠지만 오라클에서 대우가 별로 맘에 않들었다고 하네요. 그러한 그가 나와서 뭘했을 까요? 배운게 도둑질인데, 오라클 회사를 나와서 ‘Monty Program’ 이라는 것을 하게됩니다. 그리고 이 ‘Moty Program’ 에서 GPL 라이센스로 되어있는 MySQL 코드를 Branch 해서 RDBMS를 만들게 되었는데 그것이 바로 ‘MariaDB’ 입니다.
Monty Widenius 는 오라클이 MySQL 을 인수하게되자 오픈 소스 진영에 MySQL 을 구해달라는 호소문을 올리기도 합니다.
실제로 오라클이 MySQL 을 인수하고 난 후에, 오라클은 라이센스 정책을 변경했으며 MySQL 의 테스트 소스코드를 비공개로 변경했습니다.
이러한 오라클의 폐쇄적인 정책으로 불구하고 MariaDB 는 수많은 개발자들의 기부로 인해서 성장했고 대부분의 리눅스 배포판에서 MySQL 을 대체하는데 이르렀습니다. 현재 MariaDB 는 10 버전을 출시로 더욱 강력해지고 안전한 데이터베이스를 제공하고 있습니다.
PostgreSQL 은 인기있는 오픈소스 데이터베이스 시스템 입니다. PostgreSQL 9.0 으로 넘어오면서 ‘Hot Stand by Replication’ 기능을 제공하게 되는등 많은 변화가 있었습니다.
이 문서는 CentOS 7 배포판에서 PostgreSQL 설치에 대한 것입니다.
1. 준비
다음의 패키지가 설치되어 있어야 합니다.
1 |
yum install gcc.x86_64 gcc-c++.x86_64 wget.x86_64 bzip2-devel.x86_64 pkgconfig.x86_64 openssl-devel.x86_64 make.x86_64 man.x86_64 nasm.x86_64 gmp.x86_64 gdbm-devel.x86_64 readline-devel.x86_64 compat-readline43.x86_64 ncurses-devel.x86_64 db4-devel.x86_64 automake* autoconf* pcre-devel.x86_64 -y |
2. Download and Unpack
1 2 3 4 |
cd /usr/src wget http://ftp.postgresql.org/pub/source/v9.4beta2/postgresql-9.4beta2.tar.bz2 tar xjf postgresql-9.4beta2.tar.bz2 cd postgresql-9.4beta2 |
3. Configure and Compile and Install
필요한 기능이 무엇인지를 고민해 봅시다. 많은 기능들을 제공하지만 대략적으로 다음과 같은 기능을 제공하는 것이 좋습니다.
PostgreSQL 9.x 를 설치하는데 있어서 필요한 기능이 무엇인지를 먼저 생각해야 합니다. 각 기능에 대한 것은 각각 홈페이지를 참고하세요.
필요한 패키지를 설치 합니다.
1 |
yum install -y zlib-devel.x86_64 bison.x86_64 flex.x86_64 |
그리고 기능을 위한 패키지를 설치 합니다.
1 |
yum install -y tcl-devel.x86_64 perl-devel.x86_64 openssl-devel.x86_64 pam-devel.x86_64 krb5-devel.x86_64 e2fsprogs-devel.x86_64 gettext-devel.x86_64 libxml2-devel.x86_64 libxslt-devel.x86_64 perl-ExtUtils-Embed.noarch python-devel.x86_64 |
Compile option 을 다음과 같이 지정합니다.
1 2 3 4 5 |
export CPPFLAGS=' -I/usr/include/et' export CFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=k8 -I/usr/include/et -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE' export CXXFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=k8 -I/usr/include/et -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE' export LIBNAME=lib64 export PYTHON=/usr/bin/python |
mtune 을 자신의 CPU 에 맞게끔 수정해야 합니다. 자세한 사항은 여기(GCC Optimization)를 참고 하세요.
Configure를 다음과 같이 실행하고 컴파일을 합니다.
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 |
./configure \ --disable-rpath \ --prefix=/usr/local/pgsql9.4 \ --with-perl \ --with-python \ --with-tcl \ --with-tclconfig=/usr/lib64 \ --with-openssl \ --with-pam \ --with-gssapi \ --with-includes=/usr/include \ --with-libraries=/usr/lib64 \ --enable-nls --enable-profiling \ --disable-thread-safety \ --with-libxml \ --with-libxslt \ --with-system-tzdata=/usr/share/zoneinfo \ --sysconfdir=/etc/sysconfig/pgsql make world #tutorial compile sed "s|C=`pwd`;|C=/usr/local/pgsql9.4/lib/tutorial;|" < src/tutorial/Makefile > src/tutorial/GNUmakefile make -C src/tutorial NO_PGXS=1 all make install make -C contrib install mkdir /usr/local/pgsql9.4/share/man mv doc/src/sgml/man1 doc/src/sgml/man3 doc/src/sgml/man7 /usr/local/pgsql9.4/share/man/ |
4. 후속작업
PostgreSQL 9.x 를 시스템에 이식시키기 위해서 다음과 같은 과정을 진행해 줍니다.
PostgreSQL 시스템 계정 추가
1 2 3 4 |
export PGPREFIX=/usr/local/pgsql9.4 groupadd -g 26 -o -r postgres useradd -M -n -g postgres -o -r -d $PGPREFIX -s /bin/bash -c "PostgreSQL Server" -u 26 postgres chown postgres $PGPREFIX |
initdb 실행
1 2 |
export PGDATA=/usr/local/pgsql9.4/data su -l postgres -c "/usr/local/pgsql9.4/bin/initdb -E UTF-8 --locale=ko_KR.UTF-8 --lc-collate=ko_KR.UTF-8 --pgdata='$PGDATA' " |
Pam 설정
1 2 3 4 |
]# vi /etc/pam.d/postgresql #%PAM-1.0 auth include system-auth account include system-auth |
ldconfig 라이브러리 추가
1 2 |
echo "/usr/local/pgsql9.4/lib" > /etc/ld.so.conf.d/postgresql.conf ldconfig |
lib64 심볼릭 링크
php와 같은 프로그램들은 설치시에 ‘/usr/lib64’ 와 같은 라이브러리 디렉토리를 검색합니다. 따라서 pgsql9.4의 lib 디렉토리를 lib64 심볼릭 링크를 만들어 줍니다.
1 2 |
cd /usr/local/pgsql9.4 ln -s lib lib64 |
Systemd 설정
CentOS 7 부터는 initscript 가 아닌 systemd 를 이용해 데몬 서비스들을 관리 합니다. 먼저 systemd 에 등록을 위한 파일을 다음과 같이 작성 합니다.
postgresql.service 파일
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# It's not recommended to modify this file in-place, because it will be # overwritten during package upgrades. If you want to customize, the # best way is to create a file "/etc/systemd/system/postgresql.service", # containing # .include /lib/systemd/system/postgresql.service # ...make your changes here... # For more info about custom unit files, see # http://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F # For example, if you want to change the server's port number to 5433, # create a file named "/etc/systemd/system/postgresql.service" containing: # .include /lib/systemd/system/postgresql.service # [Service] # Environment=PGPORT=5433 # This will override the setting appearing below. # Note: changing PGPORT or PGDATA will typically require adjusting SELinux # configuration as well; see /usr/share/doc/postgresql-*/README.rpm-dist. # Note: do not use a PGDATA pathname containing spaces, or you will # break postgresql-setup. # Note: in F-17 and beyond, /usr/lib/... is recommended in the .include line # though /lib/... will still work. [Unit] Description=PostgreSQL database server After=network.target [Service] Type=forking User=postgres Group=postgres # Port number for server to listen on Environment=PGPORT=5432 # Location of database directory Environment=PGDATA=/usr/local/pgsql9.4/data # Where to send early-startup messages from the server (before the logging # options of postgresql.conf take effect) # This is normally controlled by the global default set by systemd # StandardOutput=syslog # Disable OOM kill on the postmaster OOMScoreAdjust=-1000 ExecStartPre=/usr/local/pgsql9.4/bin/postgresql-check-db-dir ${PGDATA} ExecStart=/usr/local/pgsql9.4/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300 ExecStop=/usr/local/pgsql9.4/bin/pg_ctl stop -D ${PGDATA} -s -m fast ExecReload=/usr/local/pgsql9.4/bin/pg_ctl reload -D ${PGDATA} -s # Give a reasonable amount of time for the server to start up/shut down TimeoutSec=300 [Install] WantedBy=multi-user.target |
systemd 에 등록할 파일을 위와같이 작성합니다. 작성한 후에 /usr/lib/systemd/system 디렉토리에 복사주고 활성화 해줍니다.
1 2 3 |
mv postgresql.service /usr/lib/systemd/system systemctl enable postgresql.service |
그리고 파일 내용에 postgresql-check-db-dir 파일을 호출하는데 이는 다음과 같습니다.
postgresql-check-db-dir 파일.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#!/bin/sh # This script verifies that the postgresql data directory has been correctly # initialized. We do not want to automatically initdb it, because that has # a risk of catastrophic failure (ie, overwriting a valuable database) in # corner cases, such as a remotely mounted database on a volume that's a # bit slow to mount. But we can at least emit a message advising newbies # what to do. PGDATA="$1" if [ -z "$PGDATA" ] then echo "Usage: $0 database-path" exit 1 fi # PGVERSION is the full package version, e.g., 9.1.2 # Note: the specfile inserts the correct value during package build PGVERSION=9.4 # PGMAJORVERSION is major version, e.g., 9.1 (this should match PG_VERSION) PGMAJORVERSION=`echo "$PGVERSION" | sed 's/^\([0-9]*\.[0-9]*\).*$/\1/'` # PREVMAJORVERSION is the previous major version, e.g., 8.4, for upgrades # Note: the specfile inserts the correct value during package build PREVMAJORVERSION=9.4 # Check for the PGDATA structure if [ -f "$PGDATA/PG_VERSION" ] && [ -d "$PGDATA/base" ] then if [ x`cat "$PGDATA/PG_VERSION"` = x"$PGMAJORVERSION" ] then : A-OK elif [ x`cat "$PGDATA/PG_VERSION"` = x"$PREVMAJORVERSION" ] then echo $"An old version of the database format was found." echo $"You may upgrade to version $PGMAJORVERSION." exit 1 else echo $"An old version of the database format was found." echo $"You need to dump and reload before using PostgreSQL $PGMAJORVERSION." echo $"You may upgrade to version $PGMAJORVERSION." exit 1 fi else # No existing PGDATA! Warn the user to initdb it. echo $"\"$PGDATA\" is missing or empty." echo $"Use \"initdb\" to initialize the database cluster." exit 1 fi exit 0 |