PostgreSQL 13 バックアップ操作とリストア操作

スポンサーリンク

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]# 
タイトルとURLをコピーしました