🕌

CentOS7にPostgreSQL12をインストールから設定まで

2021/04/09に公開

目標

外部Webサーバから接続するためのPostgreSQL12の環境をCentOS7に構築する。
その後、ローカルのデータベースのdumpファイルを復元する。

環境

筆者端末

OS:Windows10Pro-ver1909
コンソール:Powershell

DBサーバOS情報

CentOS7.8 - x86_64

1. PostgreSQL開発元Yumリポジトリを追加

以下のURLからDBサーバのOSに合ったリポジトリパッケージをダウンロードする。
下記コマンドの引数に対象のURLを指定する。
※筆者はCentOS7 - x86_64のURLを指定した。
https://yum.postgresql.org/repopackages.php

# yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
(省略)
Installed:
  pgdg-redhat-repo.noarch 0:42.0-14

Complete!

2. PostgreSQLパッケージをインストール

PostgreSQLのパッケージは以下のサブパッケージからなる。その中から適切なパッケージをインストールする。今回は、DBサーバであるためpostgresql12-serverをインストールする。

パッケージ名 説明
postgresql12 クライアントプログラム
postgresql12-libs 共有ライブラリ
postgresql12-server サーバプログラム
postgresql12-docs マニュアル
postgresql12-contrib 追加モジュール
postgresql12-devel 開発用ヘッダファイルとライブラリ
postgresql12-llvmjit JIT コンパイル対応
postgresql12-plperl PL/Perl (Perl 手続き言語)
postgresql12-plpython3 PL/Python (Python 3 手続き言語)
postgresql12-pltcl PL/Tcl (Tcl 手続き言語)
postgresql12-test テストツール
# yum -y install postgresql12-server
(省略)
Complete!

3. データベースクラスタの作成

データベースクラスタとはデータベースを格納する領域のことで、データベースサーバの起動にはデータベースクラスタが必要である。initdbコマンドで作成ができる。OS付属のpostgresql-12-setupでもできるが、認証方式がident固定のため、以下の方法で行う。

# su - postgres -c '/usr/pgsql-12/bin/initdb -E UTF8 --locale=C -A scram-sha-256 -W'
データベースシステム内のファイルの所有者はユーザ"postgres"となります。
このユーザをサーバプロセスの所有者とする必要があります。

データベースクラスタはロケール"C"で初期化されます。
デフォルトのテキスト検索構成は english に設定されます。

データベージのチェックサムは無効です。

新しいスーパユーザのパスワードを入力してください: (パスワードを入力)
再入力してください: (パスワードを再入力)

ディレクトリ/var/lib/pgsql/12/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
動的共有メモリの実装を選択しています ... posix
デフォルトのmax_connectionsを選択しています ... 100
デフォルトのshared_buffersを選択しています ... 128MB
デフォルトの時間帯を選択しています ... Asia/Tokyo
設定ファイルを作成しています ... ok
ブートストラップスクリプトを実行しています ... ok
ブートストラップ後の初期化を実行しています ... ok
データをディスクに同期しています ... ok

成功しました。以下のようにしてデータベースサーバを起動することができます:

    /usr/pgsql-12/bin/pg_ctl -D /var/lib/pgsql/12/data -l ログファイル start

su - postgres

initdbコマンドはpostgresユーザで実行しなければならないため、ユーザを切り替えて実行する必要がある。

-E UTF8

デフォルトのエンコーディングを設定する。

--locale=C

デフォルトのロケールをなしにする。

-A scram-sha-256

認証方式を設定する。バージョン9以前はmd5認証であったが、10以降はより強度の高いscram-sha-256を用いる。

4. データベースサーバの起動

以下のコマンドえデータベースサーバを起動する。

# systemctl start postgresql-12.service

5. スーパーユーザの環境変数設定

PostgreSQLのスーパーユーザであるpostgresでデータベースの管理をするように設定ファイルを編集する。

# pwd
/var/lib/pgsql
# su - postgres
$ vi .pgsql_profile
/var/lib/pgsql/.pgsql_profile
PATH=/usr/pgsql-13/bin:$PATH
MANPATH=/usr/pgsql-13/share/man:$MANPATH
PGDATA=/var/lib/pgsql/13/data
export PATH MANPATH PGDATA
# pwd
/var/lib/pgsql
# su - postgres
$ vi .bash_profile
/var/lib/pgsql/.bash_profile
#PGDATA=/var/lib/pgsql/12/data
PGDATA=/data
$ source ~/.bash_profile

6. データベースサーバの再起動

postgresユーザで以下のコマンドでデータベースサーバを再起動する。

# su - postgres
$ pg_ctl stop
$ pg_ctl start

7. 外部からのデータベースサーバアクセス許可設定

pg_hba.confファイルとpostgresql.confファイルを編集し、特定IPアドレスからのアクセスを許可する。
※設定が終わったら手順6の再起動を行う。

# su - postgres
$ cd 12/data
$ vi pg_hba.conf
conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     scram-sha-256
# IPv4 local connections:
- #host    all             all             127.0.0.1/32            scram-sha-256
+ host    all             all              指定したいIPアドレス    scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     scram-sha-256
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256
# su - postgres
$ cd 12/data
$ vi postgresql.conf
postgresql.conf
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

- #listen_addresses = 'localhost'         # what IP address(es) to listen on;
+ listen_addresses = '指定したいIPアドレス'# what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
#port = 5432                            # (change requires restart)

8. 新規DBの作成からdumpファイル復元

新しいロールを作成し、そのロールがオーナーのデータベースを作成する。

# su - postgres
$ psql -U postgres
# CREATE ROLE ロール名 with superuser login password 'パスワード';
# CREATE DATABASE データベース名 with owner ロール名
# exit
------------------------------------
以下でデータベースにアクセスできるか確認
$ psql -U ロール名 -d データベース名
------------------------------------
以下でdumpファイルからデータベースを復元
$ psql -U ロール名 データベース名 < dumpファイル名

9. 感想

設定を反映させるのを忘れて、設定が間違っているのかと勘違いして手戻りする場面も多かった。設定を編集したら反映しなければならないことを思い知った。これをWebシステムで参照する部分を今度は記事にする予定・・・

Discussion