【PostgreSQL】Zabbixのデータベース論理バックアップ
Contents
はじめに
データベースの障害対策として、バックアップは有効な手段です。そして、いざという時にぶっつけ本番とならないよう、バックアップとリストアはきちんと手順に残しておくことが大切です。
今回は、PostgreSQLをデータベースとして使用しているZabbixサーバの論理バックアップについて手順を検証してみました。
前提条件
以下の前提条件で検証しています。
- 使用ソフトウェアは以下の通り
- CentOS 8.1
- Zabbix 5.0
- PostgreSQL 10.6
- コマンドはroot権限を持つユーザで実行
- PostgreSQLのDBスーパーユーザは
postgres
- Zabbix用DB名、DBオーナーは共に
zabbix
pg_hba.conf
で、ローカルからのDB接続はtrustに設定
論理バックアップの概要
PostgreSQLのデータベース論理バックアップは、以下の特徴があります。ファイル自体をコピーする物理バックアップと比べて簡易に取得できます。
- DBデータをファイルに書き出す
- オンライン(データベースが動作したまま)で取得可能
- リストア時はバックアップ時点までのデータ状態に戻る
バックアップ対象DBの確認
psql
コマンドで、データベースの一覧を表示します。今回は、zabbix
データベースをバックアップ対象にします。
# psql -U postgres -c '\l'
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+----------+-------------------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
zabbix | zabbix | UTF8 | C | C |
(4 行)
バックアップ
PostgreSQLの論理バックアップには、pg_dump
コマンドを使用します。バックアップファイルの形式によって、コマンドオプションが異なります。
カスタム形式
pg_dump
コマンドに-Fc
オプションを付与することで、カスタム形式フォーマットでバックアップを取得します。
カスタム形式の場合、データが圧縮されるのでプレーン形式よりもファイルサイズを削減できます。出力されるファイルはバイナリ形式になります。
# pg_dump -U postgres -Fc zabbix > zabbix.dump
取得したバックアップファイルを確認します。Zabbixインストール直後の状態で、約1.8MBの容量でした。
# ls -lh zabbix.dump
-rw-r--r--. 1 root root 1.8M 8月 19 01:19 zabbix.dump
プレーン形式
プレーン形式フォーマットでバックアップする場合は、-Fc
オプションは付けません。
プレーン形式の場合、出力されるファイルはSQL文が羅列されたテキスト形式になります。内容を確認することができます。
# pg_dump -U postgres zabbix > zabbix.dump
バックアップファイルを確認します。ファイルサイズは約4.5MBで、カスタム形式と比べて2倍以上のサイズとなりました。
# ls -lh zabbix.dump
-rw-r--r--. 1 root root 4.5M 8月 19 01:22 zabbix.dump
リストア
疑似障害の生成
データベースのリストア前後の状態を比較するため、Zabbixにホストを追加します。
わざと障害を起こすために、zabbix
データベースを削除します。
データベースアクセスが発生している場合削除に失敗するので、先にhttpdとzabbix-serverのサービスを停止してから削除処理を行います。
# systemctl stop httpd zabbix-server
# dropdb -U postgres zabbix
# systemctl start httpd zabbix-server
この状態でZabbixのWebUIを確認すると、データベースが見つからず接続エラーが表示されます。
zabbix
データベースが削除され存在しないことを確認します。
# psql -U postgres -c '\l'
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+----------+-------------------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(3 行)
カスタム形式
カスタム形式バックアップファイルのリストアは、pg_restore
コマンドで行います。
zabbix
データベースが削除された状態の場合は、以下のコマンドでリストアします。
-d
オプションの引数には、存在する任意のデータベース(例: postgres
)を指定します。
-C
オプションを使用すると、リストア対象のデータベースが新規に作成されます。
# pg_restore -U postgres -C -d postgres zabbix.dump
既にzabbix
データベースが存在している環境にバックアップデータをリストアする場合は、-C
の代わりに-c
オプションを使用し、-d
オプションの引数にリストア対象データベースであるzabbix
を指定します。
-c
オプションを使用すると、リストア対象データベースの内容を一度削除してから、バックアップデータが適用されます。
# pg_restore -U postgres -c -d zabbix zabbix.dump
プレーン形式
プレーン形式バックアップファイルのリストアは、psql
コマンドで行います。
psql
コマンド実行時は、リストア対象のデータベースが存在している必要があります。-T template0
オプションを付与したcreatedb
コマンドで、空のデータベースを作成しておきます。
# createdb -U postgres -T template0 -O zabbix zabbix
# psql -U postgres zabbix < zabbix.dump
リストア後のZabbixの状態確認
再度ZabbixのWebUIからホストの一覧を確認すると、論理バックアップを取得した時点(test1
ホストがまだ作成されていない状態)にリストアされていることがわかります。