【PostgreSQL】Zabbixのデータベース論理バックアップ

はじめに

データベースの障害対策として、バックアップは有効な手段です。そして、いざという時にぶっつけ本番とならないよう、バックアップとリストアはきちんと手順に残しておくことが大切です。
今回は、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ホストがまだ作成されていない状態)にリストアされていることがわかります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です