CentOS7にPostgreSQL12をインストールから設定まで
目標
外部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を指定した。
# 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
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
#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
# 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
#------------------------------------------------------------------------------
# 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