PostgreSQL 12.4をCentOS 7.8へインストールしてPITR可能な初期設定を行う
目次
概要
PostgreSQL 12をCentOS 7.8へインストールした時の手順です。 前回インストール手順を掲載したときはバージョン10.4でしたが、その時から本質的には手順は変わりません。 ただ前回はパッケージファイルをサーバにダウンロードしてからrpmコマンドでインストールしましたが、 今回はPostgreSQLのYUMリポジトリを登録して、yumコマンドでインストールする形に変えました。
構成
利用環境
サーバ環境はVMware vSphere Hypervisorの仮想マシンを利用しました。 仮想マシンのスペックは以下のとおりです。
項目 | 内容 |
---|---|
ハイパーバイザ | VMware vSphere Hypervisor 7.0.0 (Build 15843807) |
仮想マシン | ESXi 7.0 仮想マシン |
CPU | 2 vCPUs |
メモリ | 2 GB |
ハードディスク1 | 80 GB |
SCSI アダプタ | LSI Logic SAS |
ディレクトリ構成は任意ですが、今回は以下の通りとします。 ご自身の環境に読み替えて構築してください。
カレントデータ | /data/ |
---|---|
バックアップデータ | /bkup/ |
データベースクラスタ | /data/pgdata1/ |
WALファイル | /data/pgdata1/pg_wal/ |
アーカイブファイル | /bkup/pgdata1/pg_arch/ |
サーバ構成
OSバージョン
CentOS Linux release 7.8.2003 (Core)
ソフトウェア・パッケージ一覧
- pgdg-redhat-repo-latest.noarch.rpm
- postgresql12-12.4-1PGDG.rhel7.x86_64.rpm
- postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm
- postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm
環境構築
インストール
YUMリポジトリのインストール
PostgreSQLの公式サイトで配布されているCentOS 7用の(=RHEL 7用の)YUMリポジトリを登録するためのパッケージをインストールします。
# yum -y localinstall https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
読み込んだプラグイン:fastestmirror, langpacks
pgdg-redhat-repo-latest.noarch.rpm | 6.7 kB 00:00:00
/var/tmp/yum-root-33m8TX/pgdg-redhat-repo-latest.noarch.rpm を調べています: pgdg-redhat-repo-42.0-13.noarch
/var/tmp/yum-root-33m8TX/pgdg-redhat-repo-latest.noarch.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ pgdg-redhat-repo.noarch 0:42.0-13 を インストール
--> 依存性解決を終了しました。
base/7/x86_64 | 3.6 kB 00:00:00
base/7/x86_64/group_gz | 153 kB 00:00:00
base/7/x86_64/primary_db | 6.1 MB 00:00:00
extras/7/x86_64 | 2.9 kB 00:00:00
extras/7/x86_64/primary_db | 206 kB 00:00:00
updates/7/x86_64 | 2.9 kB 00:00:00
updates/7/x86_64/primary_db | 4.5 MB 00:00:00
依存性を解決しました
========================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
========================================================================================================================
インストール中:
pgdg-redhat-repo noarch 42.0-13 /pgdg-redhat-repo-latest.noarch 11 k
トランザクションの要約
========================================================================================================================
インストール 1 パッケージ
合計容量: 11 k
インストール容量: 11 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : pgdg-redhat-repo-42.0-13.noarch 1/1
検証中 : pgdg-redhat-repo-42.0-13.noarch 1/1
インストール:
pgdg-redhat-repo.noarch 0:42.0-13
完了しました!
# ls -l /etc/yum.repos.d/
合計 48
-rw-r--r--. 1 root root 1664 4月 8 07:01 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 4月 8 07:01 CentOS-CR.repo
-rw-r--r--. 1 root root 649 4月 8 07:01 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 630 4月 8 07:01 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 4月 8 07:01 CentOS-Sources.repo
-rw-r--r--. 1 root root 7577 4月 8 07:01 CentOS-Vault.repo
-rw-r--r--. 1 root root 314 4月 8 07:01 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 616 4月 8 07:01 CentOS-x86_64-kernel.repo
-rw-r--r-- 1 root root 9381 9月 17 21:55 pgdg-redhat-all.repo ←インストールされた
PostgreSQL 12のインストール
登録したYUMリポジトリを元にPostgreSQL 12の最新版をインストールします。 2020年9月20日時点ではバージョン12.4がインストールされました。
# yum -y install postgresql12-server 読み込んだプラグイン:fastestmirror, langpacks Determining fastest mirrors * base: ftp.riken.jp * extras: ftp.riken.jp * updates: ftp.riken.jp pgdg-common | 2.9 kB 00:00:00 pgdg10 | 3.6 kB 00:00:00 pgdg11 | 3.6 kB 00:00:00 pgdg12 | 3.6 kB 00:00:00 pgdg13 | 3.6 kB 00:00:00 pgdg95 | 3.6 kB 00:00:00 pgdg96 | 3.6 kB 00:00:00 (1/13): pgdg10/7/x86_64/group_gz | 245 B 00:00:00 (2/13): pgdg12/7/x86_64/group_gz | 245 B 00:00:00 (3/13): pgdg11/7/x86_64/group_gz | 245 B 00:00:00 (4/13): pgdg13/7/x86_64/group_gz | 246 B 00:00:00 (5/13): pgdg12/7/x86_64/primary_db | 124 kB 00:00:00 (6/13): pgdg13/7/x86_64/primary_db | 17 kB 00:00:00 (7/13): pgdg95/7/x86_64/group_gz | 249 B 00:00:00 (8/13): pgdg96/7/x86_64/group_gz | 249 B 00:00:00 (9/13): pgdg-common/7/x86_64/primary_db | 134 kB 00:00:01 (10/13): pgdg96/7/x86_64/primary_db | 240 kB 00:00:00 (11/13): pgdg11/7/x86_64/primary_db | 255 kB 00:00:02 (12/13): pgdg95/7/x86_64/primary_db | 218 kB 00:00:00 (13/13): pgdg10/7/x86_64/primary_db | 253 kB 00:00:05 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ postgresql12-server.x86_64 0:12.4-1PGDG.rhel7 を インストール --> 依存性の処理をしています: postgresql12-libs(x86-64) = 12.4-1PGDG.rhel7 のパッケージ: postgresql12-server-12.4-1PGDG.rhel7.x86_64 --> 依存性の処理をしています: postgresql12(x86-64) = 12.4-1PGDG.rhel7 のパッケージ: postgresql12-server-12.4-1PGDG.rhel7.x86_64 --> 依存性の処理をしています: libpq.so.5()(64bit) のパッケージ: postgresql12-server-12.4-1PGDG.rhel7.x86_64 --> トランザクションの確認を実行しています。 ---> パッケージ postgresql12.x86_64 0:12.4-1PGDG.rhel7 を インストール ---> パッケージ postgresql12-libs.x86_64 0:12.4-1PGDG.rhel7 を インストール --> 依存性解決を終了しました。 依存性を解決しました ======================================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ======================================================================================================================== インストール中: postgresql12-server x86_64 12.4-1PGDG.rhel7 pgdg12 5.1 M 依存性関連でのインストールをします: postgresql12 x86_64 12.4-1PGDG.rhel7 pgdg12 1.6 M postgresql12-libs x86_64 12.4-1PGDG.rhel7 pgdg12 370 k トランザクションの要約 ======================================================================================================================== インストール 1 パッケージ (+2 個の依存関係のパッケージ) 総ダウンロード容量: 7.0 M インストール容量: 30 M Downloading packages: 警告: /var/cache/yum/x86_64/7/pgdg12/packages/postgresql12-12.4-1PGDG.rhel7.x86_64.rpm: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 442df0f8: NOKEY postgresql12-12.4-1PGDG.rhel7.x86_64.rpm の公開鍵がインストールされていません (1/3): postgresql12-12.4-1PGDG.rhel7.x86_64.rpm | 1.6 MB 00:00:01 (2/3): postgresql12-server-12.4-1PGDG.rhel7.x86_64.rpm | 5.1 MB 00:00:00 (3/3): postgresql12-libs-12.4-1PGDG.rhel7.x86_64.rpm | 370 kB 00:00:05 ------------------------------------------------------------------------------------------------------------------------ 合計 1.3 MB/s | 7.0 MB 00:00:05 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG から鍵を取得中です。 Importing GPG key 0x442DF0F8: Userid : "PostgreSQL RPM Building Project <pgsqlrpms-hackers@pgfoundry.org>" Fingerprint: 68c9 e2b9 1a37 d136 fe74 d176 1f16 d2e1 442d f0f8 Package : pgdg-redhat-repo-42.0-13.noarch (@/pgdg-redhat-repo-latest.noarch) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : postgresql12-libs-12.4-1PGDG.rhel7.x86_64 1/3 インストール中 : postgresql12-12.4-1PGDG.rhel7.x86_64 2/3 インストール中 : postgresql12-server-12.4-1PGDG.rhel7.x86_64 3/3 検証中 : postgresql12-server-12.4-1PGDG.rhel7.x86_64 1/3 検証中 : postgresql12-12.4-1PGDG.rhel7.x86_64 2/3 検証中 : postgresql12-libs-12.4-1PGDG.rhel7.x86_64 3/3 インストール: postgresql12-server.x86_64 0:12.4-1PGDG.rhel7 依存性関連をインストールしました: postgresql12.x86_64 0:12.4-1PGDG.rhel7 postgresql12-libs.x86_64 0:12.4-1PGDG.rhel7 完了しました!
設定
OSユーザ(postgres)のパスワード変更
PostgreSQLのパッケージをインストールすると、postgres という名前のユーザがLinux上に自動で作成されます。 作成直後はパスワードが設定されていないため、設定します。
# passwd postgres ユーザー postgres のパスワードを変更。 新しいパスワード: ←パスワードを入力(表示されません) 新しいパスワードを再入力してください: ←上と同じパスワードを入力(表示されません) passwd: すべての認証トークンが正しく更新できました。
OSユーザ(postgres)の環境変数設定
postgresユーザの環境変数としてデータベースクラスタとPostgreSQLのコマンドへのパスを設定します。
# grep postgres /etc/passwd ←postgresユーザのホームディレクトリを確認
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
# cd /var/lib/pgsql/
# vi .bash_profile
※以下、該当箇所のみ変更※ PGDATA=/var/lib/pgsql/12/data export PGDATA ↓変更 PGDATA=/data/pgdata1 export PGDATA export PATH=$PATH:/usr/pgsql-12/bin
データベースクラスタ用ディレクトリ($PGDATA)作成
インストールしたRPMパッケージで初期設定されているデータベースクラスタは /var/lib/pgsql/12/data/ となっています。 このままでも良いのですが、ディレクトリ階層が深くて分かりづらいため /data/pgdata1/ に変更します。 また、アーカイブファイルの格納先は /bkup/pgdata1/pg_arch/ とします。 その他、データベースクラスタのベースバックアップの取得先は /bkup/ ディレクトリを想定しています(この手順では触れません)。
データベースクラスタのベースバックアップと最新のWALファイル、アーカイブファイルはPITRに必要なファイルなので、 冗長化を高めたディスクに保管した方が良いですが、今回は物理障害ではなく、論理障害(人為的操作ミス)からの 復旧に限定した構成としているため、データベースクラスタと同じディスク上に保存しています。
それぞれディレクトリを作成して必要なパーミッションを設定します。 データベースクラスタ用のディレクトリはPostgreSQL管理者ユーザの postgres のみが参照、更新できるようにします。
# cd / # mkdir -m 777 data ←カレントデータ用 # mkdir -m 777 bkup ←バックアップ・アーカイブデータ用 # su - postgres -bash-4.2$ cd /data/ -bash-4.2$ mkdir -m 700 pgdata1 ←データベースクラスタ用 -bash-4.2$ ls -l 合計 0 drwx------ 2 postgres postgres 6 9月 20 03:57 pgdata1 -bash-4.2$ cd /bkup/ -bash-4.2$ mkdir -m 700 pgdata1 -bash-4.2$ ls -l 合計 0 drwx------ 2 postgres postgres 6 9月 20 03:58 pgdata1 -bash-4.2$ cd pgdata1/ -bash-4.2$ mkdir -m 700 pg_arch ←アーカイブファイル用 -bash-4.2$ ls -l 合計 0 drwx------ 2 postgres postgres 6 9月 20 03:58 pg_arch
データベースクラスタ作成
前の手順で作成したデータベースクラスタ用ディレクトリ内にデータベースクラスタを作成します。 initdbコマンドを使用しますが、必ず管理者ユーザであるpostgresユーザで実行してください。 エンコーディングは UTF8、ロケールは設定しません。 PostgreSQLでロケールを選択した場合、検索性能に問題が出るらしく、 ロケールを選択しないことが推奨とされています。(12でも該当するかは未確認です)
-bash-4.2$ initdb --encoding=UTF8 --no-locale --pgdata=/data/pgdata1 データベースシステム内のファイルの所有者はユーザ"postgres"となります。 このユーザをサーバプロセスの所有者とする必要があります。 データベースクラスタはロケール"C"で初期化されます。 デフォルトのテキスト検索構成は english に設定されます。 データベージのチェックサムは無効です。 ディレクトリ/data/pgdata1の権限を設定しています ... ok サブディレクトリを作成しています ... ok 動的共有メモリの実装を選択しています ... posix デフォルトのmax_connectionsを選択しています ... 100 デフォルトの shared_buffers を選択しています ... 128MB selecting default time zone ... Asia/Tokyo 設定ファイルを作成しています ... ok ブートストラップスクリプトを実行しています ... ok ブートストラップ後の初期化を実行しています ... ok データをディスクに同期しています ... ok initdb: 警告: ローカル接続に対して"trust"認証を有効にします pg_hba.confを編集する、もしくは、次回initdbを実行する時に -A オプション、 あるいは --auth-local および --auth-host オプションを使用することで変更する ことがきます。 成功しました。以下のようにしてデータベースサーバを起動することができます: pg_ctl -D /data/pgdata1 -l ログファイル start -bash-4.2$
PostgreSQLの初期設定
ここではPostgreSQLインスタンスがリッスンするIPアドレスと ログ出力、WALファイルのアーカイブに関する設定を行います。
初期設定ではPostgreSQLが localhost(127.0.0.1)のみでリッスンする設定になっています。 そのため、他のサーバからTCP/IP接続することができません。 ローカルからもリモートからもTCP/IP接続できるように、 このサーバが持つ全てのIPアドレスでリッスンする設定とします(全てと言っても今回の構成ではNICは1つですが)。
ログの出力先は /data/pgdata1/log/ ディレクトリとします。 ログファイル名は postgresql-20200920.log のように ログファイルが作成された年月日を付与します。 ログファイルは7日間経過後に自動でローテーションされ、 新しいログファイルに出力が切り替わるようにします。 ログが一定のファイルサイズに達した際にローテーションされる機能は使用しません。 あくまで日数経過後にローテーションします。 ログメッセージの形式は以下のようになります。
【ログメッセージの出力例】
2020-09-20 04:29:12.013 JST [2449] LOG: database system was shut down at 2020-09-20 03:59:12 JST
2020-09-20 04:29:12.016 JST [2445] LOG: database system is ready to accept connections
WALファイルは初期設定ではアーカイブする設定になっていないため、 WALファイルが循環すると古いファイルから削除されてしまいます。 PITRではベースバックアップからの一連の更新ログが必要となるため、 WALファイルをアーカイブする設定に変更します。 また、データベースクラスタのベースバックアップ(pg_basebackup)を取得する際に レプリケーションプロトコルが利用される仕様となっているため、 一部レプリケーションに関する設定も行います。
データベースクラスタ内の postgresql.conf ファイルを編集します。
-bash-4.2$ cd /data/pgdata1/ -bash-4.2$ vi postgresql.conf
※以下、該当箇所のみ変更※ #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ #listen_addresses = 'localhost' # what IP address(es) to listen on; ↓変更 listen_addresses = '*' # what IP address(es) to listen on;
#password_encryption = md5 # md5 or scram-sha-256
↓変更
password_encryption = scram-sha-256 # md5 or scram-sha-256
#------------------------------------------------------------------------------
# WRITE-AHEAD LOG
#------------------------------------------------------------------------------
#wal_level = replica # minimal, replica, or logical
↓変更
wal_level = replica # minimal, replica, or logical
#archive_mode = off # enables archiving; off, on, or always
↓変更
archive_mode = on # enables archiving; off, on, or always
#archive_command = '' # command to use to archive a logfile segment
↓変更
archive_command = 'cp %p /bkup/pgdata1/pg_arch/%f' # command to use to archive a logfile segment
#------------------------------------------------------------------------------
# REPLICATION
#------------------------------------------------------------------------------
#max_wal_senders = 10 # max number of walsender processes
↓変更
max_wal_senders = 2 # max number of walsender processes
#------------------------------------------------------------------------------
# REPORTING AND LOGGING
#------------------------------------------------------------------------------
log_filename = 'postgresql-%a.log' # log file name pattern,
↓変更
log_filename = 'postgresql-%Y%m%d.log' # log file name pattern,
log_rotation_age = 1d # Automatic rotation of logfiles will
↓変更
log_rotation_age = 7d # Automatic rotation of logfiles will
クライアント認証の設定
クライアントからPostgreSQLに接続する際の認証設定を行います。 デフォルトで設定されている内容は全てコメントアウトし、必要な設定をファイルの末尾に追加します。 設定する認証ルールは以下の通りとします。
- postgresユーザ(管理者ユーザ)がUNIXドメインソケット接続(ローカル接続)を行った場合は、 パスワードの入力を求めない。
- postgresユーザ(管理者ユーザ)がUNIXドメインソケット接続(ローカル接続)でレプリケーションが要求された場合、 パスワードの入力を求めない(replicationという名のデータベースは存在せず、特殊な操作を表す予約語)。
- postgresユーザ(管理者ユーザ)以外のユーザ(一般ユーザ)がUNIXドメインソケット接続(ローカル接続)を行った場合は、 PostgreSQLユーザ名とパスワードで認証する。パスワードはscram-sha-256で暗号化して送信する。
- ユーザに関係なくTCP/IP接続(リモート接続)を行った場合は、PostgreSQLユーザ名とパスワードで認証する。 システム開発者がpgAdmin4などを利用してインターネット経由で接続してくることを想定し、接続元IPアドレスが不定であることから、 任意のIPアドレス(0.0.0.0/0)からの接続を許可する。※LAN環境でのみ利用する場合はIPアドレスを限定してください。 パスワードはscram-sha-256で暗号化して送信する。
PostgreSQLでデータベースクラスタのオンラインバックアップ(pg_basebackup)を実行する場合、 レプリケーションプロトコルを利用してバックアップが作成される仕様となっています。 そのため、上記2つ目のルールを記述しておく必要があることに注意してください。
-bash-4.2$ vi pg_hba.conf
※以下、該当箇所のみ変更※ # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. local replication all trust host replication all 127.0.0.1/32 trust host replication all ::1/128 trust ↓変更 # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only #local all all trust # IPv4 local connections: #host all all 127.0.0.1/32 trust # IPv6 local connections: #host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. #local replication all trust #host replication all 127.0.0.1/32 trust #host replication all ::1/128 trust local all postgres peer local replication postgres peer local all all scram-sha-256 host all all 0.0.0.0/0 scram-sha-256
Systemdの設定
Systemdを利用してPostgreSQLの起動を管理する設定を行います。 PostgreSQL用のサービスユニットファイルをコピーして編集します。 データベースクラスタのディレクトリを初期設定から変更したので、ファイル内の環境変数 PGDATA を修正します。
-bash-4.2$ exit ログアウト # cp -piv /lib/systemd/system/postgresql-12.service /etc/systemd/system/postgresql-12.service `/lib/systemd/system/postgresql-12.service' -> `/etc/systemd/system/postgresql-12.service' # cd /etc/systemd/system/ # vi postgresql-12.service
※以下、該当箇所のみ変更※ # Location of database directory Environment=PGDATA=/var/lib/pgsql/12/data/ ↓変更 # Location of database directory Environment=PGDATA=/data/pgdata1/
SystemdでPostgreSQLを自動起動に設定
SystemdでPostgreSQLのサービスユニットが認識されていることを確認します。 インストール後はPostgreSQLは停止状態で、自動起動も無効になっています。 今回の手順でPostgreSQLをインストールした場合、 サービスユニット名は postgresql-12.service となっています。 OS起動時にSystemdがPostgreSQLを自動起動するように設定します。
# systemctl status postgresql-12.service ● postgresql-12.service - PostgreSQL 12 database server Loaded: loaded (/etc/systemd/system/postgresql-12.service; disabled; vendor preset: disabled) ←自動起動無効 Active: inactive (dead) Docs: https://www.postgresql.org/docs/12/static/ # systemctl enable postgresql-12.service Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /etc/systemd/system/postgresql-12.service. # systemctl status postgresql-12.service ● postgresql-12.service - PostgreSQL 12 database server Loaded: loaded (/etc/systemd/system/postgresql-12.service; enabled; vendor preset: disabled) ←自動起動有効 Active: inactive (dead) ←停止状態 Docs: https://www.postgresql.org/docs/12/static/
SystemdでPostgreSQLの起動
SystemdでPostgreSQLを起動します。
# systemctl start postgresql-12.service
# systemctl status postgresql-12.service
● postgresql-12.service - PostgreSQL 12 database server
Loaded: loaded (/etc/systemd/system/postgresql-12.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2020-09-20 04:29:12 JST; 2s ago ←起動状態
Docs: https://www.postgresql.org/docs/12/static/
Process: 2439 ExecStartPre=/usr/pgsql-12/bin/postgresql-12-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
Main PID: 2445 (postmaster)
CGroup: /system.slice/postgresql-12.service
tq2445 /usr/pgsql-12/bin/postmaster -D /data/pgdata1/
tq2448 postgres: logger
tq2450 postgres: checkpointer
tq2451 postgres: background writer
tq2452 postgres: walwriter
tq2453 postgres: autovacuum launcher
tq2454 postgres: archiver
tq2455 postgres: stats collector
mq2456 postgres: logical replication launcher
9月 20 04:29:11 centos78 systemd[1]: Starting PostgreSQL 12 database server...
9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG: starting PostgreSQL 12.4 o...4-bit
9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG: listening on IPv4 address ... 5432
9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG: listening on IPv6 address ... 5432
9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG: listening on Unix socket "...5432"
9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.003 JST [2445] LOG: listening on Unix socket "...5432"
9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.012 JST [2445] LOG: redirecting log output to ...ocess
9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.012 JST [2445] HINT: Future log output will ap...log".
9月 20 04:29:12 centos78 systemd[1]: Started PostgreSQL 12 database server.
Hint: Some lines were ellipsized, use -l to show in full.
データベースのスーパーユーザのパスワード設定
データベースクラスタ作成時点では、スーパーユーザ(データベースユーザ) postgres のパスワードが設定されていません。 以下では postgres ユーザのパスワードを「Pass-123」に設定しますが、実際にはもっと推測されづらいものを採用してください。
# su - postgres 最終ログイン: 2020/09/20 (日) 03:57:31 JST日時 pts/0 -bash-4.2$ psql -c "alter role postgres with password 'Pass-123';" ALTER ROLE -bash-4.2$ exit ログアウト
動作確認
プロセス起動確認
PostgreSQLのプロセスが起動していることを確認します。 今回の設定ではマスタサーバプロセス1つとワーカプロセス8つが起動します。
# ps -ef | grep postgres | grep -v grep ↓マスタサーバプロセス(1つ) postgres 2445 1 0 04:29 ? 00:00:00 /usr/pgsql-12/bin/postmaster -D /data/pgdata1/ ↓ワーカプロセス(8つ) postgres 2448 2445 0 04:29 ? 00:00:00 postgres: logger postgres 2450 2445 0 04:29 ? 00:00:00 postgres: checkpointer postgres 2451 2445 0 04:29 ? 00:00:00 postgres: background writer postgres 2452 2445 0 04:29 ? 00:00:00 postgres: walwriter postgres 2453 2445 0 04:29 ? 00:00:00 postgres: autovacuum launcher postgres 2454 2445 0 04:29 ? 00:00:00 postgres: archiver postgres 2455 2445 0 04:29 ? 00:00:00 postgres: stats collector postgres 2456 2445 0 04:29 ? 00:00:00 postgres: logical replication launcher
ログ出力確認
設定したログファイルにログが出力されていることを確認します。 ログメッセージの先頭に出力されている日付もJSTなので日本時間になっていることが分かります。
# cd /data/pgdata1/log/ # ls -l 合計 4 -rw------- 1 postgres postgres 186 9月 20 04:29 postgresql-20200920.log # cat postgresql-20200920.log 2020-09-20 04:29:12.013 JST [2449] LOG: database system was shut down at 2020-09-20 03:59:12 JST 2020-09-20 04:29:12.016 JST [2445] LOG: database system is ready to accept connections
SQL実行確認
psqlコマンドで、SQLを実行できることを確認します。
# su - postgres 最終ログイン: 2020/09/20 (日) 04:31:35 JST日時 pts/0 -bash-4.2$ psql psql (12.4) "help"でヘルプを表示します。 postgres=# select now(); now ------------------------------ 2020-09-20 04:33:28.65803+09 (1 行) postgres=# select oid, datname from pg_database; oid | datname -------+----------- 14187 | postgres 1 | template1 14186 | template0 (3 行) postgres=# \q -bash-4.2$ exit ログアウト
SystemdでPostgreSQLの停止確認
PostgreSQLインスタンスを停止できることを確認します。 確認が終わったらまた起動しておきます。
# systemctl stop postgresql-12.service # systemctl status postgresql-12.service ● postgresql-12.service - PostgreSQL 12 database server Loaded: loaded (/etc/systemd/system/postgresql-12.service; enabled; vendor preset: disabled) Active: inactive (dead) since 日 2020-09-20 04:36:29 JST; 6s ago ←停止状態 Docs: https://www.postgresql.org/docs/12/static/ Process: 2445 ExecStart=/usr/pgsql-12/bin/postmaster -D ${PGDATA} (code=exited, status=0/SUCCESS) Process: 2439 ExecStartPre=/usr/pgsql-12/bin/postgresql-12-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS) Main PID: 2445 (code=exited, status=0/SUCCESS) 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG: starting PostgreSQL 12.4 o...4-bit 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG: listening on IPv4 address ... 5432 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG: listening on IPv6 address ... 5432 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.002 JST [2445] LOG: listening on Unix socket "...5432" 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.003 JST [2445] LOG: listening on Unix socket "...5432" 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.012 JST [2445] LOG: redirecting log output to ...ocess 9月 20 04:29:12 centos78 postmaster[2445]: 2020-09-20 04:29:12.012 JST [2445] HINT: Future log output will ap...log". 9月 20 04:29:12 centos78 systemd[1]: Started PostgreSQL 12 database server. 9月 20 04:36:28 centos78 systemd[1]: Stopping PostgreSQL 12 database server... 9月 20 04:36:29 centos78 systemd[1]: Stopped PostgreSQL 12 database server. Hint: Some lines were ellipsized, use -l to show in full. # ps -ef | grep postgres | grep -v grep ←PostgreSQLのプロセスが停止しているので何も表示されない # systemctl start postgresql-12.service ←停止確認が終わったらまた起動しておく
アーカイブ確認
PostgreSQLのインストール直後はアーカイブファイルは存在しませんが、 上記動作確認を行っている中でWALファイルが循環し、アーカイブされるため、 最後にアーカイブファイルが作成されていることを確認します。
# cd /bkup/pgdata1/pg_arch/ # ls -l 合計 16384 -rw------- 1 postgres postgres 16777216 9月 20 04:36 000000010000000000000001