読者です 読者をやめる 読者になる 読者になる

labunix's blog

labunixのラボUnix

Zabbixサーバのpostgresqlデータベースを稼働中のままバックアップ、リストアする

■Zabbixサーバのpostgresqlデータベースを稼働中のままバックアップ、リストアする

 自身の環境できちんとテストして安全だと分かっていればすんなり作業出来るけれど、
 それが初めてだったりすると、壊してしまうかも知れない怖さがありますよね。

 カスタマイズでいじくり回す前に試しておきましょう。
 PostgreSQLサーバは正常稼働していることが前提条件です。

■zabbixデータベースのバックアップ
 デフォルトでは「-Fp」(plain)

$ sudo -u zabbix pg_dump zabbix -f /tmp/pg_dump_zabbix_`date '+%Y%m%d'`.sql
$ sudo -u zabbix pg_dump -Fc zabbix -f /tmp/pg_dump_zabbix_Fc_`date '+%Y%m%d'`.pdb

$ file /tmp/pg_dump_zabbix_*
/tmp/pg_dump_zabbix_20140721.sql:    UTF-8 Unicode text, with very long lines
/tmp/pg_dump_zabbix_Fc_20140721.pdb: PostgreSQL custom database dump - v1.12-0

■以下で新しいDBを作成、そこにリストア
 再起動したことをZabbixエージェントが拾って障害通知をする程度で、
 「dropdb zabbix」をしても正常にアクセス出来た。

 「php」のDATABASE変更後リロードのタイミングで反映されているようなので、
 apache2の再起動は要らないかも知れない。

 監視データがバックアップ時点からリストア実行までの間抜けるのは仕方無い。

$ sudo -u zabbix createdb zabbix_backup; \
  sudo -u zabbix pg_restore -d zabbix_backup /tmp/pg_dump_zabbix_Fc_20140721.pdb 

$ sudo -u zabbix psql -c "select datname,datacl from pg_database where datname='zabbix_backup';" 2>&1 | cat
    datname    | datacl 
---------------+--------
 zabbix_backup | 
(1)

$ grep zabbix_backup /etc/zabbix/zabbix.conf.php 
$DB['DATABASE'] = 'zabbix_backup';

$ grep zabbix_backup /etc/zabbix/zabbix_server.conf 
DBName=zabbix_backup

$ sudo /etc/init.d/zabbix-server restart;sudo /etc/init.d/apache2 restart

■平文ならpsqlコマンドでリストア出来るけど、database名は指定出来ない。。。

$ sudo -u zabbix dropdb zabbix; \
  sudo -u zabbix createdb zabbix; \
  sudo -u zabbix psql -f /tmp/pg_dump_zabbix_`date '+%Y%m%d'`.sql

$ sudo -u zabbix psql -c "select datname,datacl from pg_database where datname='zabbix';" 2>&1 | cat
    datname    | datacl 
---------------+--------
 zabbix        | 
(1)

$ grep "DATABASE" /etc/zabbix/zabbix.conf.php
$DB['DATABASE'] = 'zabbix';

$ grep "^DBName" /etc/zabbix/zabbix_server.conf
DBName=zabbix

$ sudo /etc/init.d/zabbix-server restart;sudo /etc/init.d/apache2 restart

■zabbix -> zabbix_backup -> zabbix への切り替わりを確認したので、
 私の環境では安心して削除出来ます。

$ sudo -u zabbix dropdb zabbix_backup