PostgreSQLのバックアップ操作およびリストア操作についてまとめます。このページでは低難度の「論理バックアップ」「オフライン物理バックアップ」についてまとめます。この手法はバックアップ実施時点までの復旧しか出来ませんので、バックアップ取得から障害発生までのデータは消失する事に注意が必要です。
- PostgreSQL インストール
- PostgreSQL データベースの作成
- PostgreSQL contribモジュールの使い方
- PostgreSQL パラメタの設定方法
- PostgreSQL ベンチマークツールの紹介
- PostgreSQL WAL(Write Ahead Log)の基本説明
- PostgreSQL バックアップとリストア (いまここ)
- PostgreSQL PITR(Point In Time Recovery)基本概念の説明
- PostgreSQL PITR(Point In Time Recovery)操作方法の説明
- PostgreSQL PITR(Point In Time Recovery)タイムライン操作
- PostgreSQL ストリーミングレプリケーションの最小構成
- PostgreSQL ストリーミングレプリケーションのパラメタ説明
- PostgreSQL ストリーミングレプリケーションの障害復旧
- PostgreSQL ストリーミングレプリケーションの多段構成
- PostgreSQL ストリーミングレプリケーションのDR向け設定
- PostgreSQL ストリーミングレプリケーションのコンフリクト
- PostgreSQL 自動バキューム(AUTO VACUUM)
- PostgreSQL HOT(Heap Only Tuple)
- PostgreSQL インデックスのメンテナンス
- PostgreSQL 統計情報の更新
- PostgreSQL 実行計画
- PostgreSQL スロークエリの調査方法
バックアップ操作概要
PostgreSQLのバックアップ操作は、「論理バックアップ」「オフライン物理バックアップ」「オンライン物理バックアップ」の3つがあります。
バックアップ操作 | 停止要否 | 復旧時点 |
---|---|---|
論理バックアップ | 稼働中 | バックアップ時点 |
オフライン物理バックアップ | 停止中 | バックアップ時点 |
オンライン物理バックアップ | 稼働中 | バックアップ時点から障害発生直前まで |
論理バックアップ
バックアップ操作
pg_dumpコマンドまたはpg_dumpallコマンドを使用すると、データベースのバックアップが可能です。このコマンドはバックアップデータが標準出力されますので、それを適宜ファイルへリダイレクトしましょう。
MySQLを知っている方は、mysqldumpとほぼ同じ仕様と思って差し支えございません。
pg_dump <データベース名> > <データベース単位のバックアップファイル> pg_dumpall > <全データベースのバックアップファイル>
使用例は以下の通りです。
pg_dump dvdrental > dvdrental.dump pg_dumpall > postgres_all.dump
バックアップされたファイルはテキストとして保存されます。テキストファイルを読むと何がバックアップ対象で何がバックアップ対象外であるかが明らかでしょう。例えば、データベース単位のバックアップではCREATE DATABASE文が含まれていませんので、データベースに対するencodingやLOCALEの設定はバックアップ対象外である事が分かります。
[postgres@centos10 ~]$ head dvdrental.dump -- -- PostgreSQL database dump -- -- Dumped from database version 13.1 -- Dumped by pg_dump version 13.1 SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0;
リストア操作
論理バックアップによって作成されたファイルは単なるSQL文ですので、これをpsqlコマンドで実行すればリストア完了です。操作方法は多数ありますが、以下に書式の一例を示します。
psql <データベース名> < <データベース単位のバックアップファイル> psql <全データベースのバックアップファイル>
データベース単位のリストア操作例は以下の通りです。CREATE DATABASE文はバックアップファイル内に含まれていませんので、データベース未作成の場合はデータベース作成操作を予め行う必要があります。
[postgres@centos10 ~]$ createdb dvdrental [postgres@centos10 ~]$ psql dvdrental < dvdrental.dump SET SET SET SET SET set_config ------------ (1 row) SET SET <omitted>
全データベースのリストア操作例は以下の通りです。
[postgres@centos10 ~]$ psql < postgres_all.dump SET SET SET ERROR: ロール"postgres"はすでに存在します ALTER ROLE You are now connected to database "template1" as user "postgres". SET SET <omitted>
オフライン物理バックアップ
オフラインバックアップは、PostgreSQLが停止した状態で${PGDATA}配下のコピーを作成する単純なバックアップ手法です。コピーをリストア先の${PGDATA}配下に配置すればリストア完了です。
バックアップの操作例を以下に示します。
[root@centos10 ~]# systemctl stop postgresql-13.service [root@centos10 ~]# cd /var/lib/pgsql/13/ [root@centos10 13]# tar cvzf backup_postgresql.tar.gz data/* data/PG_VERSION data/base/ data/base/1/ data/base/1/1255 <omitted> [root@centos10 13]# mv backup_postgresql.tar.gz /nfs/postgres/backup/ [root@centos10 13]#
リストア操作例を以下に示します。
[root@centos11 ~]# systemctl start postgresql-13.service [root@centos11 ~]# [root@centos11 ~]# cd /var/lib/pgsql/13/ [root@centos11 13]# rm -rf data [root@centos11 13]# cp -p /nfs/postgres/backup/backup_postgresql.tar.gz ./ [root@centos11 13]# tar xvzf backup_postgresql.tar.gz data/PG_VERSION data/base/ data/base/1/ data/base/1/1255 data/base/1/1255_fsm data/base/1/1247 data/base/1/1247_fsm <omitted> [root@centos11 13]# chmod 700 data [root@centos11 13]# chown postgres:postgres data [root@centos11 13]# systemctl start postgresql-13.service [root@centos11 13]#