はじめに
この記事はPostgreSQLって知っているけど、どう運用し始めればいいのか困っている人のための記事です。
PostgreSQLについてリファレンス的な説明はあるが、じゃあどうやって運用をするのがセオリーなのかがわからないという声があったため、一例として、私がやっている運用についてまとめています。
DB運用をするにあたり、最低限の操作として以下の手順をまとめました。
- インストール手順
- バックアップ手順
- リストア手順
なお、本資料はPostgreSQL入門 /インストール/バックアップ/リストアの資料としても利用しております。
インストール手順
事前の検討ポイント
サーバ設定
今回はCentOS7系でのインストールを考えます。
また、システムロケールとして"LANG=ja_JP.UTF-8"を利用します。
CentOS7では、以下のコマンドでシステムロケールを設定・確認できます。
localectl set-locale LANG=ja_JP.UTF-8
localectl status
PostgreSQLのバージョン
PostgreSQLのバージョンは「x.y.z」の形式で、「x.y」がメジャーバージョン「z」がマイナーバージョンになります。
メジャーバージョンが変わると内部構造や機能が大きく変わる可能性があるので、利用時にどのメジャーバージョンを利用するか決めましょう。
PostgreSQLのクライアントツールはPostgreSQLのバージョンを厳密にみていることが多く、新バージョンのクライアントから旧バージョンDBサーバにはアクセスできますが、旧バージョンのクライアントから新バージョンのDBサーバにアクセスすることはできません。
例: × PostgreSQL9.5のクライアント -> PostgresSQL9.6のサーバ
今回は、PostgreSQLの9.5系でのインストールを考えます。
もし、運用中にメジャーバージョンを上げるときには、アプリケーションの回帰テストをオススメします。
また、メジャーバージョンの下げる方向に移行することは運用上できません。
PostgreSQLの設定
DB内での2バイト文字の保存形式を決める必要があります。
今回は、UTF-8を利用します。(移行案件でなければ、これで良いのではないかと思います)
また、PostgreSQLとして独自にロケールを設定できるのですが、環境をシンプルにするならシステムロケールと一緒(no-locale)で良いかと思います。
ロケール設定の詳細については、こちらの資料に詳しく記載されております。
http://lets.postgresql.jp/documents/technical/text-processing/2/
そのほか、インストール直後に変更するべき設定については、こちらを参考になります。
インストール手順
まず、公式リポジトリから専用のrpmを取得します。
ダウンロードURLは、OSの種類、インストールするPostgreSQLのバージョンによって違います。
su -
wget http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-redhat95-9.5-3.noarch.rpm
rpm -ivh pgdg-redhat95-9.5-3.noarch.rpm
PostgreSQLをインストールします。
この時に、95を忘れるとCentOS標準のリポジトリから、別バージョンのPostgreSQL(CentSOの場合は9.2)がインストールされるので注意してください。
yum install postgresql95-server postgresql95-contrib postgresql95-test
DBの保存領域(/var/lib/pgsql/9.5/data以下)を作成します。
この時、initdbに"--encoding=UTF-8 --no-locale"をオプションとして設定します。
postgresql○○-setupからinitdbを呼び出すときには、"PGSETUP_INITDB_OPTIONS"でオプションを設定していれば読み込まれます。
export PGSETUP_INITDB_OPTIONS="--encoding=UTF-8 --no-locale"
/usr/pgsql-9.5/bin/postgresql95-setup initdb
DBへのアクセス権を設定します。
ローカルからのアクセスを全許可、ローカルIPセグメント(例:10.1.0.0)からパスワードアクセス(平文)を許可する設定は、以下になります。
vi /var/lib/pgsql/9.5/data/pg_hba.conf
--▼変更----------------------------------------------------------------
# "local" is for Unix domain socket connections only
local all all trust
------------------------------------------------------------------------------
--▼末尾に追加----------------------------------------------------------------
#LOCAL
host all all 10.1.0.0/16 password
------------------------------------------------------------------------------
ここまで、できたらPostgreSQLのサーバを起動します
systemctl enable postgresql-9.5
systemctl start postgresql-9.5
ローカルからpostgresユーザ(管理ユーザ)でアクセスできることを確認します。
psql -U postgres
バックアップ・リストア手順
バックアップ方法の検討
PostgresSQLからデータを丸ごと取得するには以下の2種類の方法があります。
- pg_dumpall
- pg_dump
- DBの保存領域(/var/lib/pgsql/9.5/data)をファイルとして保存
- pgadminを利用したバックアップ
pd_dumpallは、対象サーバ内のDBやユーザ権限などすべてを取得するコマンドで、主にハードウェア障害対策として使います。
pg_dumpは、対象サーバ内の対象DBの中身のデータをすべて取得するコマンドで、主にDBのサーバ移行などに利用します。
今回は、pg_dumpallを使ったバックアップを記載します。
バックアップ手順(pg_dumpall)
以下の様なコマンドで、DB内のすべてのデータが{バックアップファイルの保存場所}に保存されます。
pg_dumpall | gzip 1> {バックアップファイルの保存場所} 2> pg_dumpall.log
これをバックアップサーバにファイル転送して、保存すれば良いです。
リストア手順(pg_dumpall)
もし、ハードウェア障害などが発生し、上記のバックアップからリストアするときは、「initdb」まで完了したサーバを用意して、以下のコマンドを実行します。
cat {バックアップファイルの保存場所} | gunzip | psql template1 > pg_restore.log