SlideShare a Scribd company logo
PostgreSQL
バックアップ & リカバリ 入門
沖縄支部セミナー
2013-04-27
株式会社 メトロシステムズ
佐藤 千佳
日本PostgreSQLユーザ会
2
自己紹介
佐藤 千佳 (さとう ちか)
所属: 株式会社メトロシステムズ(東京・池袋)
Mail: metro.satock@gmail.com
PostgreSQL との関わり
2007 年ごろからPostgreSQL 機能調査、周辺ツールを
含めた性能評価を実施
お知らせ
この資料は後日アップします
日本PostgreSQLユーザ会
3
アジェンダ
1.PostgreSQL の紹介
2.バックアップ&リカバリとは
3.PostgreSQLで使用可能なバックアップ&リカバリ
4.PostgreSQL のアーキテクチャ
5.PostgreSQL のバックアップ&リカバリ方法
6.ツールの紹介
日本PostgreSQLユーザ会
4
PostgreSQL の紹介
日本PostgreSQLユーザ会
5
PostgreSQL とは... (1/3)
代表的なオープンソースの ORDBMS
PostgreSQL ライセンスで配布
BSD ライセンスに類似
Linux をはじめほとんどの UNIX 系 OS で動く
Windows や Mac OS X でも動く
日本語サイトが充実している
最新版の日本語ドキュメントがすぐにリリースされる
活発な意見交換の場(ML/勉強会/懇親会という名の...)
皆さん親切 … 等
日本PostgreSQLユーザ会
6
PostgreSQL とは... (2/3)
日本語ドキュメントサイト
日本PostgreSQLユーザ会
7
PostgreSQL とは... (3/3)
PostgreSQLのポータルサイト「Let's Postgres」
日本PostgreSQLユーザ会
8
PostgreSQL とは... (3/3)
PostgreSQLのポータルサイト「Let's Postgres」
詳しくは Web で !
日本PostgreSQLユーザ会
9
バックアップ & リカバリとは
日本PostgreSQLユーザ会
10
バックアップ・リカバリとは...(1/2)
バックアップとは
不測の事態に備え、データベースの内容を別ファイル
に保存しておくこと
物理バックアップ
データベースを構成するファイル群を物理的に別の媒体へ
コピーする
論理バックアップ
表の定義や格納されているデータなどをファイルに出力する
日本PostgreSQLユーザ会
11
バックアップ・リカバリとは...(1/2)
バックアップとは
データベースの内容を別ファイルに保存しておくこと
物理バックアップ
データベースを構成するファイル群を物理的に別の媒体へ
コピーする
バックアップ
データベース
DB1
DB2
データベース
DB1
DB2
バックアップ領域
日本PostgreSQLユーザ会
12
バックアップ・リカバリとは...(1/2)
データベース
社員表を
バックアップ
--- 社員表テーブル定義
CREATE TABLE 社員(
・・・
);
--- 社員表のデータ
1 田中 男
2 佐藤 女
3 鈴木 女
・・・
バックアップとは
データベースの内容を別ファイルに保存しておくこと
論理バックアップ
表の定義や格納されているデータなどをファイルに出力する
社員表の表定義と格納
されていたデータがバッ
クアップされる
日本PostgreSQLユーザ会
13
バックアップ・リカバリとは...(2/2)
リカバリとは
失ったデータをバックアップファイルを使って復旧する
こと
ユーザーによるオペレーションミス
メディア障害
システム障害
自然災害
ディスクのミラーリングだけで安心していません
か ?
・ オペレーションミスは救えません
・ ミラーリングはバックアップではありません
      … 等
日本PostgreSQLユーザ会
14
PostgreSQLで使用可能な
バックアップ・リカバリ
日本PostgreSQLユーザ会
15
PostgreSQLで使用可能なバックアップ・リカバリ(1/3)
物理バックアップとリカバリ
設定ファイルから丸ごとバックアップできる!
コールドバックアップとリカバリコールドバックアップとリカバリ
論理バックアップとリカバリ
メジャーバージョンアップ時のデータ移行や、異なるCPU
アーキテクチャ環境への移行にも使える!
ホットバックアップとリカバリホットバックアップとリカバリ
日本PostgreSQLユーザ会
16
PostgreSQLで使用可能なバックアップ・リカバリ(2/3)
物理バックアップとPITR
最新の状態から任意の時点まで、好みに合わせてリカバ
リできる!
ポイント・イン・タイム・リカバリポイント・イン・タイム・リカバリ
((PPoint-oint-IIn-n-TTimeime RRecoveryecovery))
日本PostgreSQLユーザ会
17
PostgreSQLで使用可能なバックアップ・リカバリ(3/3)
①① コールドバックアップとリカバリコールドバックアップとリカバリ
②② ホットバックアップとリカバリホットバックアップとリカバリ
③③ ポイント・イン・タイム・リカバリポイント・イン・タイム・リカバリ
日本PostgreSQLユーザ会
18
PostgreSQL のアーキテクチャ
日本PostgreSQLユーザ会
19
PostgreSQL アーキテクチャ 「超」入門(1/5)
アプリケーション 各種
プロセス群
トランザクション
ログ
アーカイブ
ログ
データベース・クラスタ
$PGDATA
データ
ベース
データ
ベース
データ
ベース
PostgreSQL
問い合わせ
書き込み
読み込み
書き込み書き込み
日本PostgreSQLユーザ会
20
PostgreSQL アーキテクチャ 「超」入門(2/5)
データベース・クラスタのファイル構造の一部
~
$PGDATA
~
・・・ データベース・クラスタ
・・・ トランザクション・ログ格納ディレクトリ
・・・ パラメータ・ファイル
・・・ クライアント認証設定ファイル
データベース・クラスタで共有する
テーブルの格納ディレクトリ
postmaster.pid
pg_hba.conf
postgresql.conf
pg_xlog/
global/
pg_tblspc/
base/
テーブルスペースへのシンボリック
リンク格納ディレクトリ
・・・
・・・ データベース格納ディレクトリ
・・・
起動中のPostgreSQL のプロセスID
記録ファイル(サーバ起動時のみ存在)
・・・
日本PostgreSQLユーザ会
21
PostgreSQL アーキテクチャ 「超」入門(2/5)
データベース・クラスタのファイル構造の一部
~
$PGDATA
~
・・・ データベース・クラスタ
・・・ トランザクション・ログ格納ディレクトリ
・・・ パラメータ・ファイル
・・・ クライアント認証設定ファイル
データベース・クラスタで共有する
テーブルの格納ディレクトリ
postmaster.pid
pg_hba.conf
postgresql.conf
pg_xlog/
global/
pg_tblspc/
base/
テーブルスペースへのシンボリック
リンク格納ディレクトリ
・・・
・・・ データベース格納ディレクトリ
・・・
・・・ 起動中のPostgreSQL のプロセスID
記録ファイル(サーバ起動時のみ存在)
日本PostgreSQLユーザ会
22
PostgreSQL アーキテクチャ 「超」入門(3/5)
データベース・クラスタのファイル構造の一部
~
$PGDATA
~
・・・ データベース・クラスタ
postmaster.pid
pg_hba.conf
postgresql.conf
pg_xlog/
global/
pg_tblspc/
base/
・ データベースに対する変更
履歴の記録ファイルを格納
⇒一般的にトランザクション
ログとよばれている
・ PostgreSQL 界ではこの
ディレクトリに格納されている
ファイルを WAL (ワル)とよぶ
⇒Write Ahead Log の略
日本PostgreSQLユーザ会
23
PostgreSQL アーキテクチャ 「超」入門(1/5)
アプリケーション 各種
プロセス群
pg_xlogアーカイブ
ログ
データ
ベース
データ
ベース
データ
ベース
PostgreSQL
問い合わせ
書き込み
読み込み
書き込み書き込み
$PGDATA
日本PostgreSQLユーザ会
24
PostgreSQL アーキテクチャ 「超」入門(1/5)
アプリケーション 各種
プロセス群
アーカイブ
ログ
データ
ベース
データ
ベース
データ
ベース
PostgreSQL
WAL
WAL
WAL
pg_xlog
$PGDATA
日本PostgreSQLユーザ会
25
PostgreSQL アーキテクチャ 「超」入門(1/5)
アプリケーション 各種
プロセス群
アーカイブ
ログ
データ
ベース
データ
ベース
データ
ベース
PostgreSQL
WAL
WAL
WAL
pg_xlog
日本PostgreSQLユーザ会
26
PostgreSQL アーキテクチャ 「超」入門(4/5)
WAL(トランザクションログ)とアーカイブログ
WAL 1
WAL 2
WAL 3
WAL 4
WAL 2
WAL 3
WAL 4
WAL 5
これでは過去の
変更ログが
なくなってしまう!!
上書き(回収)
される
たまった WAL は
PostgreSQL に
不要と判断されると・・・
日本PostgreSQLユーザ会
27
PostgreSQL アーキテクチャ 「超」入門(4/5)
WAL(トランザクションログ)とアーカイブログ
WAL 1
WAL 2
WAL 3
WAL 4
WAL 2
WAL 3
WAL 4
WAL 5
WAL 1
これが
アーカイブログ
(WALアーカイブ)上書きされる前に
WAL をコピー!
日本PostgreSQLユーザ会
28
PostgreSQL アーキテクチャ 「超」入門(5/5)
各種
プロセス群
データ
ベース
データ
ベース
データ
ベース
PostgreSQL
用語の整理
WAL を
コピーしたもの
データベース
への変更ログ
WAL
WAL
WAL
WAL アーカイブ
コピー
WALコピー
WAL コピー
WAL
$PGDATA
pg_xlog
日本PostgreSQLユーザ会
29
PostgreSQL の
バックアップ & リカバリ方法
日本PostgreSQLユーザ会
30
PostgreSQL のバックアップ & リカバリ方法
①① コールドバックアップとリカバリコールドバックアップとリカバリ
②② ホットバックアップとリカバリホットバックアップとリカバリ
③③ ポイント・イン・タイム・リカバリポイント・イン・タイム・リカバリ
日本PostgreSQLユーザ会
31
PostgreSQL のバックアップ & リカバリ方法
①① コールドバックアップとリカバリコールドバックアップとリカバリ
②② ホットバックアップとリカバリホットバックアップとリカバリ
③③ ポイント・イン・タイム・リカバリポイント・イン・タイム・リカバリ
日本PostgreSQLユーザ会
32
コールドバックアップとリカバリ(1/4)
バックアップの流れ
1.データベースを停止
2.$PGDATA を丸ごとコピー
$ pg_ctl stop -w -D $PGDATA
waiting for server to shut down.... done
server stopped
$ rsync -av $PGDATA/ $BACKUP/pgdata
cpコマンド, tarコマンド,
rsyncコマンド … 等
日本PostgreSQLユーザ会
33
コールドバックアップとリカバリ(2/4)
リカバリの流れ
1.データベースを強制終了
2.既存の$PGDATAを退避
3.バックアップファイルで$PGDATAを置き換える
$ pg_ctl stop -m immediate -D $PGDATA
waiting for server to shut down.... done
server stopped
$ rm -rf $PGDATA
$ rsync -av $BACKUP/pgdata/ $PGDATA
日本PostgreSQLユーザ会
34
コールドバックアップとリカバリ(3/4)
時間
$PGDATA
① 2013年3月31日
バックアップ取得
② 2013年4月26日
障害発生
この間のデータは
失われる
③ $PGDATAを
バックアップファイルで置き換える
2013年3月31日
のデータ
$PGDATA
バックアップ
ファイル
データベース
停止
データベース
起動
データベース
起動
データベース
停止
リカバリ時間
バックアップ
取得時間
日本PostgreSQLユーザ会
35
コールドバックアップとリカバリ(4/4)
良いところ
手順がシンプル
データベース・クラスタ全体をバックアップした場合、他の
バックアップ方法と比較して処理が短時間で済む
注意点
データベースを停止する必要がある
バックアップを取得したタイミングにしか復旧できない
バックアップ・リカバリ対象はデータベース・クラスタ全体
(テーブル単位、データベース単位の操作はできない)
日本PostgreSQLユーザ会
36
PostgreSQL のバックアップ & リカバリ方法
①① コールドバックアップとリカバリコールドバックアップとリカバリ
②② ホットバックアップとリカバリホットバックアップとリカバリ
③③ ポイント・イン・タイム・リカバリポイント・イン・タイム・リカバリ
日本PostgreSQLユーザ会
37
ホットバックアップとリカバリ(1/10)
バックアップの流れ
1.データベースが起動していることを確認
2.PostgreSQL のツールの1 つ pg_dump または
pg_dumpall コマンドでバックアップ
$ pg_ctl status
pg_ctl: server is running (PID: xxxxx)
$ pg_dump mydb > mydb_dump.sql
日本PostgreSQLユーザ会
38
ホットバックアップとリカバリ(2/10)
pg_dump と pg_dumpall の違い
論理バックアップには 2 つの方法がある
pg_dump
テーブル単位、データベース単位にバックアップ
pg_dumpall
データベース・クラスタに格納してある全てのデータ
ベースをバックアップ
日本PostgreSQLユーザ会
39
ホットバックアップとリカバリ(3/10)
pg_dump と pg_dumpall の違い(つづき)
pg_dump には 4 種類のバックアップ形式がある
1. 平文形式
SQL 文によるスクリプトファイルを作成(デフォルト)
2. カスタム形式
バイナリ形式の圧縮されたバックアップを作成
$ pg_dump --format=plain mydb > mydb_dump.sql
$ pg_dump --format=custom mydb > mydb_dump.custom
日本PostgreSQLユーザ会
40
ホットバックアップとリカバリ(4/10)
pg_dump と pg_dumpall の違い(つづき)
3. ディレクトリ形式
バイナリ形式のバックアップを作成
テーブル単位で圧縮されたバックアップファイルを作成
4. tar 形式
バイナリ形式のバックアップを作成
テーブル単位でバックアップファイルを作成
$ pg_dump --format=directory mydb -f mydb_dump.directory
$ pg_dump --format=tar mydb > mydb_dump.tar
日本PostgreSQLユーザ会
41
ホットバックアップとリカバリ(5/10)
pg_dump と pg_dumpall の違い(つづき)
pg_dumpall のバックアップ形式は 1 種類
1. 平文形式
SQL文によるスクリプトファイルを作成
$ pg_dumpall > mydb_dumpall.sql
日本PostgreSQLユーザ会
42
出力形式によるバックアップ所要時間比較
環境
OS : RHEL6u1
MEM : 2GB
CPU : 2core/4thread
DB サイズ(pg_database_size) : 約 488 MB
バックアップコマンド 出力形式 オプション名 所要時間(秒)
pg_dump
平文(SQL) p (plain) <def.> 15.94
カスタム c (custom) 51.10
tar t (tar) 16.03
日本PostgreSQLユーザ会
43
ホットバックアップとリカバリ(6/10)
リカバリの流れ
1.データベースが起動していることを確認
2.psql または pg_restore コマンドでリカバリ
$ pg_ctl status
pg_ctl: server is running (PID: xxxxx)
$ psql -f mydb_dump.sql
必要に応じて、
データベース・クラスタ
やデータベースは事前
に作成しておく
日本PostgreSQLユーザ会
44
ホットバックアップとリカバリ(7/10)
リカバリコマンドの違い
バックアップ形式によってリカバリ方法が異なる
平文形式で取得した場合 : psql コマンド
平文形式で以外で取得した場合 : pg_restore コマンド
$ pg_restore -C -d postgres < mydb_dump.custom
$ psql -f mydb_dump.sql
日本PostgreSQLユーザ会
45
ホットバックアップとリカバリ(8/10)
バックアップ
コマンド
バックアップ
単位
出力形式
リカバリ
コマンド
pg_dump
テーブル単位
データベース単位
平文(SQL) psql
カスタム
pg_restoreディレクトリ
tar
pg_dumpall 全てのデータベース 平文(SQL) psql
コマンド対応表
日本PostgreSQLユーザ会
46
ホットバックアップとリカバリ(9/10)
時間
$PGDATA
① 2013年3月31日
バックアップ取得
② 2013年4月26日
障害発生
この間のデータは
失われる
③ psql または pg_restore コマンドで
リカバリ
2013年3月31日
のデータ
$PGDATA
バックアップ
ファイル
リカバリ時間
バックアップ
取得時間
日本PostgreSQLユーザ会
47
ホットバックアップとリカバリ(10/10)
良いところ
バックアップ取得時にデータベースを停止する必要がない
クライアント環境から実行できる
CPU アーキテクチャの異なるマシンにリカバリできる
PostgreSQL のメジャーバージョンアップに使用できる
データのみ、スキーマのみでのバックアップが可能
データベース単位、テーブル単位でバックアップが可能(pg_dump
のみ)
注意点
バックアップを開始したタイミングにしか復旧できない
他のバックアップ・リカバリと比較すると処理時間が長い
設定ファイルなどのバックアップが別途必要になる
日本PostgreSQLユーザ会
48
PostgreSQL のバックアップ & リカバリ方法
①① コールドバックアップとリカバリコールドバックアップとリカバリ
②② ホットバックアップとリカバリホットバックアップとリカバリ
③③ ポイント・イン・タイム・リカバリポイント・イン・タイム・リカバリ
日本PostgreSQLユーザ会
49
ポイント・イン・タイム・リカバリ(1/18)
バックアップ
ファイル
ベースバックアップの流れ
時間
pg_stop_backup()pg_start_backup()
$PGDATA
WAL
データ
ベース
日本PostgreSQLユーザ会
50
ポイント・イン・タイム・リカバリ(2/18)
$ cat $PGDATA/postgresql.conf
~~ 略 ~~
wal_level = archive  # PostgreSQL9.0 ~ のパラメータ
archive_mode = on
archive_command = '/bin/cp -i %p /mnt/server/archivedir/%f'
WAL をアーカイブする
ように設定
ベースバックアップの取得
① パラメータの変更
$PGDATA
WAL
データ
ベース
日本PostgreSQLユーザ会
51
ポイント・イン・タイム・リカバリ(2/18)
$ cat $PGDATA/postgresql.conf
~~ 略 ~~
wal_level = archive  # PostgreSQL9.0 ~ のパラメータ
archive_mode = on
archive_command = '/bin/cp -i %p /mnt/server/archivedir/%f'
※ 注意 ※
このパラメータを変更し
た場合、PostgreSQL
の再起動が必要 !!
ベースバックアップの取得
① パラメータの変更
$PGDATA
WAL
データ
ベース
日本PostgreSQLユーザ会
52
ポイント・イン・タイム・リカバリ(3/18)
$ psql -c "SELECT pg_start_backup(label)"
pg_start_backup
-----------------
0/13000020
(1 row)
()の中はメモ。
取得日時などに設定し
ておくと分かりやすい
ベースバックアップの取得
② バックアップの開始を記録する
$PGDATA
WAL
データ
ベース
日本PostgreSQLユーザ会
53
ポイント・イン・タイム・リカバリ(4/18)
$BACKUP/pgdata
$ rsync -av --delete --exclude=pg_xlog 
--exclude=postmaster.pid $PGDATA/ 
$BACKUP/pgdata
③ $PGDATA をコピー
ベースバックアップの取得
rsync での
取得がオススメ
$PGDATA
WAL
データ
ベース
日本PostgreSQLユーザ会
54
ポイント・イン・タイム・リカバリ(5/18)
$BACKUP/pgdata
$ psql -c "SELECT pg_stop_backup()"
pg_stop_backup
----------------
0/130000A8
(1 row)
④ バックアップの終了を記録する
ベースバックアップの取得
ベースバックアップ
$PGDATA
WAL
データ
ベース
日本PostgreSQLユーザ会
55
ポイント・イン・タイム・リカバリ(6/18)
ベース
バックアップ
ベースバックアップの取得
時間
③ pg_stop_backup()① pg_start_backup()
$PGDATA
WAL
データ
ベース
② ベースバックアップ
取得
日本PostgreSQLユーザ会
56
ポイント・イン・タイム・リカバリ(6/18)
ベース
バックアップ
ベースバックアップの取得
時間
pg_stop_backup()pg_start_backup()
$PGDATA
WAL
データ
ベース
ベースバックアップ取得中も
トランザクションは実行
日本PostgreSQLユーザ会
57
ポイント・イン・タイム・リカバリ(6/18)
ベース
バックアップ
ベースバックアップの取得
時間
pg_stop_backup()pg_start_backup()
WAL 1 WAL 2
$PGDATA
WAL
データ
ベース
ベースバックアップ
取得開始後に
発生した WAL
日本PostgreSQLユーザ会
58
ポイント・イン・タイム・リカバリ(6/18)
ベースバックアップの取得
時間
pg_stop_backuppg_start_backup
ベース
バックアップ
+ WAL 1 WAL 2
このセットで
pg_stop_backup
時点のデータ
日本PostgreSQLユーザ会
59
ポイント・イン・タイム・リカバリ(6/18)
ベースバックアップの取得
時間
pg_stop_backuppg_start_backup
ベース
バックアップ
+ WAL 1 WAL 2
このセットで
pg_stop_backup
時点のデータ
ベースバックアップ
だけでは不十分!!
日本PostgreSQLユーザ会
60
デモ
~ ベースバックアップ取得編 ~
日本PostgreSQLユーザ会
61
ポイント・イン・タイム・リカバリ(7/18)
ベースバックアップの取得について
PostgreSQL 9.1 から pg_basebackup コマンドを
使ってベースバックアップの取得!!
コマンド 1 つでベースバックアップを取得
クライアント環境からも実行可能
$ pg_basebackup -h <接続先> -D $PGDATA --progress
日本PostgreSQLユーザ会
62
ポイント・イン・タイム・リカバリ(7/18)
ベースバックアップの取得について
PostgreSQL 9.1 から pg_basebackup コマンドを
使ってベースバックアップの取得!!
コマンド 1 つでベースバックアップを取得
クライアント環境からも実行可能
$ pg_basebackup -h <接続先> -D $PGDATA --progress
スーパーユーザ
または
REPLICATION
権限が必要
max_wal_senders
パラメータ変更
日本PostgreSQLユーザ会
63
デモ 2
~ ベースバックアップ取得 ~
pg_basebackup 編
日本PostgreSQLユーザ会
64
ポイント・イン・タイム・リカバリ(8/18)
PITR
時間
WAL アーカイブ 2013年4月26日
障害発生
2013年3月31日
バックアップ取得
ベース
バックアップ
WAL 1 WAL 2 WAL 3 WAL 4
WAL 1 WAL 2 WAL 3
$PGDATA
WAL
データ
ベース
日本PostgreSQLユーザ会
65
ポイント・イン・タイム・リカバリ(9/18)
PITR
WAL アーカイブ
ベース
バックアップ WAL 1 WAL 2 WAL 3
① データベースの強制終了
$PGDATA
WAL
データ
ベース
$ pg_ctl stop -m immediate -D $PGDATA
waiting for server to shut down.... done
server stopped
2013年3月31日
日本PostgreSQLユーザ会
66
ポイント・イン・タイム・リカバリ(10/18)
PITR
WAL アーカイブ
ベース
バックアップ WAL 1 WAL 2 WAL 3
$PGDATA
WAL
データ
ベース
2013年3月31日
② アーカイブされる前のWALをバックアップ
$BACKUP/pgxlog
WAL 4
$ rsync -av $PGDATA/pg_xlog/ $BACKUP/pgxlog
WAL 1 WAL 2 WAL 3 WAL 4
日本PostgreSQLユーザ会
67
ポイント・イン・タイム・リカバリ(11/18)
PITR
WAL アーカイブ
ベース
バックアップ WAL 1 WAL 2 WAL 3
$PGDATA
WAL
データ
ベース
2013年3月31日 $BACKUP/pgxlog
WAL 4
$ tar cvfh $SAVE/pgdata_old.tar $PGDATA
$ rm -rf $PGDATA
③ 既存のデータベース・クラスタを退避後
破棄する
日本PostgreSQLユーザ会
68
ポイント・イン・タイム・リカバリ(12/18)
PITR
WAL アーカイブ
ベース
バックアップ WAL 1 WAL 2 WAL 3
$PGDATA
WAL
データ
ベース
2013年3月31日 $BACKUP/pgxlog
WAL 4
$ rsync -av $BACKUP/pgdata/* $PGDATA
④ $PGDATAをベースバックアップで
  置き換える
2013年3月31日時点
のデータベース
日本PostgreSQLユーザ会
69
ポイント・イン・タイム・リカバリ(13/18)
PITR
WAL アーカイブ
ベース
バックアップ WAL 1 WAL 2 WAL 3
$PGDATA
データ
ベース
2013年3月31日 $BACKUP/pgxlog
WAL 4
$ rm -rf $PGDATA/pg_xlog
$ rsync -av $BACKUP/pgxlog/pg_xlog $PGDATA
⑤ 手順②で取得したWALファイルを
$PGDATA/pg_xlog 配下に配置
WAL4
日本PostgreSQLユーザ会
70
ポイント・イン・タイム・リカバリ(13/18)
PITR
WAL アーカイブ
ベース
バックアップ WAL 1 WAL 2 WAL 3
$PGDATA
データ
ベース
2013年3月31日 $BACKUP/pgxlog
WAL 4
$ rm -rf $PGDATA/pg_xlog
$ rsync -av $BACKUP/pgxlog/pg_xlog $PGDATA
⑤ 手順②で取得したWALファイルを
$PGDATA/pg_xlog 配下に配置
WAL4
ベースバックアップに古い
pg_xlogが含まれている
場合は事前に削除する
日本PostgreSQLユーザ会
71
ポイント・イン・タイム・リカバリ(14/18)
PITR
WAL アーカイブ
ベース
バックアップ
WAL 1 WAL 2 WAL 3
$PGDATA
データ
ベース
WAL
$BACKUP/pgxlog
WAL 4
⑥ recovery.conf の作成
$ cat $PGDATA/recovery.conf
~~ 略 ~~
restore_command = 'cp /mnt/server/archivedir/%f "%p" '
日本PostgreSQLユーザ会
72
ポイント・イン・タイム・リカバリ(14/18)
PITR
WAL アーカイブ
ベース
バックアップ
WAL 1 WAL 2 WAL 3
$PGDATA
データ
ベース
WAL
$BACKUP/pgxlog
WAL 4
⑥ recovery.conf の作成
$ cat $PGDATA/recovery.conf
~~ 略 ~~
restore_command = 'cp /mnt/server/archivedir/%f "%p" '
日本PostgreSQLユーザ会
73
ポイント・イン・タイム・リカバリ(14/18)
PITR
WAL アーカイブ
ベース
バックアップ
WAL 1 WAL 2 WAL 3
$PGDATA
データ
ベース
WAL
$BACKUP/pgxlog
WAL 4
⑥ recovery.conf の作成
$ cat $PGDATA/recovery.conf
~~ 略 ~~
restore_command = 'cp /mnt/server/archivedir/%f "%p" '
recovery_target_time
パラメータを指定することでリ
カバリしたい”任意の時刻”
を指定することもできる
日本PostgreSQLユーザ会
74
ポイント・イン・タイム・リカバリ(15/18)
PITR
WAL アーカイブ
ベース
バックアップ
WAL 1 WAL 2 WAL 3
$PGDATA
$BACKUP/pgxlog
WAL 4
⑦ PostgreSQL の起動
$ pg_ctl start -D $PGDATA
server starting
データ
ベース
WAL4
日本PostgreSQLユーザ会
75
PostgreSQL 起動後の内部の動き
ポイント・イン・タイム・リカバリ(15/18)
PITR
WAL アーカイブ
WAL 1 WAL 2 WAL 3
$PGDATA
データ
ベース
WAL4
2013年3月31日時点
のデータベース
日本PostgreSQLユーザ会
76
PostgreSQL 起動後の内部の動き
ポイント・イン・タイム・リカバリ(15/18)
PITR
WAL アーカイブ
$PGDATA
データ
ベース
WAL4
WAL 1 WAL 2 WAL 3
①
ベースバックアップ取得以
降に発生した WAL アーカ
イブを適用
(recovery.conf で指定)
日本PostgreSQLユーザ会
77
PostgreSQL 起動後の内部の動き
ポイント・イン・タイム・リカバリ(15/18)
PITR
WAL アーカイブ
WAL 1 WAL 2 WAL 3
$PGDATA
データ
ベース
WAL4
WAL3 まで適用された
データベース
日本PostgreSQLユーザ会
78
PostgreSQL 起動後の内部の動き
ポイント・イン・タイム・リカバリ(15/18)
PITR
WAL アーカイブ
WAL 1 WAL 2 WAL 3
$PGDATA
データ
ベース
WAL3 まで適用された
データベース
②
アーカイブされなかった
最新のWAL を適用
WAL4
日本PostgreSQLユーザ会
79
ポイント・イン・タイム・リカバリ(16/18)
PITR
WAL アーカイブ
ベース
バックアップ
WAL 1 WAL 2 WAL 3
$PGDATA
$BACKUP/pgxlog
WAL 4
⑧ リカバリ完了
データ
ベース
WAL4
リカバリが完了し、データベースに接続できるようになると、
PostgreSQL のログに以下のメッセージが出力される
LOG: archive recovery complete
LOG: database system is ready to accept connections
日本PostgreSQLユーザ会
80
ポイント・イン・タイム・リカバリ(17/18)
PITR
WAL アーカイブ
ベース
バックアップ
WAL 1 WAL 2 WAL 3
$PGDATA
$BACKUP/pgxlog
WAL 4
⑨ データベースの内容を確認データ
ベース
WAL4
日本PostgreSQLユーザ会
81
デモ 3
~ PITR 編 ~
日本PostgreSQLユーザ会
82
ポイント・イン・タイム・リカバリ(18/18)
良いところ
サービスを継続したままベースバックアップが取得できる
指定した任意の時刻まで復旧できる
障害発生直前の”最新””最新”の状態まで復旧できる
注意点
手順が複雑
WALアーカイブを取得している必要がある
バックアップ・リカバリ対象はデータベース・クラスタ全体
(テーブル単位、データベース単位の操作はできない)
日本PostgreSQLユーザ会
83
コールドバックアップと
リカバリ
ホットバックアップ
とリカバリ
ポイント・イン・タイムリ
カバリ
バックアップタイプ
物理バックアップ
(オフライン)
論理バックアップ
物理バックアップ
(オンライン)
バックアップ方法
cpコマンド, tarコマンド,
rsyncコマンド, ストレー
ジスナップショットなど
pg_dump /
pg_dumpall
(1) pg_start_backup()
(2) cpコマンド, tarコマ
ンド, rsyncコマンドなど
(3) pg_stop_backup()
/ pg_basebackup
(PostgreSQL9.1~)
リカバリ方法 特になし pg_restore / psql (PITR 機能)
どこまで戻せるか バックアップ時点 バックアップ時点 任意の時点
バックアップの
最小単位
データベース・クラスタ テーブル(pg_dump) データベース・クラスタ
WALアーカイブ 不要 不要 必要
バックアップ中の
データベースの停止
必要 不要 不要
クライアント環境
からの実行
不可 可能
不可
(pg_basebackup可能)
まとめ
日本PostgreSQLユーザ会
84
コールドバックアップと
リカバリ
ホットバックアップ
とリカバリ
ポイント・イン・タイムリ
カバリ
バックアップタイプ
物理バックアップ
(オフライン)
論理バックアップ
物理バックアップ
(オンライン)
バックアップ方法
cpコマンド, tarコマンド,
rsyncコマンド, ストレー
ジスナップショットなど
pg_dump /
pg_dumpall
(1) pg_start_backup()
(2) cpコマンド, tarコマ
ンド, rsyncコマンドなど
(3) pg_stop_backup()
/ pg_basebackup
(PostgreSQL9.1~)
リカバリ方法 特になし pg_restore / psql (PITR 機能)
どこまで戻せるか バックアップ時点 バックアップ時点 任意の時点
バックアップの
最小単位
データベース・クラスタ テーブル(pg_dump) データベース・クラスタ
WALアーカイブ 不要 不要 必要
バックアップ中の
データベースの停止
必要 不要 不要
クライアント環境
からの実行
不可 可能
不可
(pg_basebackup可能)
まとめ
さまざまな制約事項の中から、そのシステムにあった
バックアップ・リカバリ方法を !!
日本PostgreSQLユーザ会
85
ツールの紹介
日本PostgreSQLユーザ会
86
pg_rman
PostgreSQL のバックアップとリカバリを管理する
ツール
PostgreSQL の外部ツール
Google Code からダウンロード可能
複雑な PITR の手順をコマンド 1 つで簡単に実行
増分バックアップや世代管理も可能
Linux などの UNIX 系 OS
で動きます
日本PostgreSQLユーザ会
87
pg_rman のバックアップ・リストアの流れ
事前準備
$ pg_rman init -B $BACKUP -D $PGDATA
$ pg_rman backup --backup-mode=full --with-serverlog
$ pg_rman validate
$ pg_ctl stop -m immediate -D $PGDATA
$ pg_rman restore
$ pg_ctl start -D $PGDATA
バックアップ
リストア(&リカバリ)
日本PostgreSQLユーザ会
88
参考文献
書籍
PostgreSQL 完全攻略ガイド (技術評論社)
オンラインドキュメント類
PostgreSQL 9.2.0文書
http://www.postgresql.jp/document/9.2/html/index.html
Let's Postgres
バックアップの概要と方式一覧
http://lets.postgresql.jp/documents/technical/backup
ストリーミング・レプリケーション
http://lets.postgresql.jp/documents/technical/replication/
オープンソースカンファレンス講演資料
http://lets.postgresql.jp/documents/report/osc2011-kansai/talks
pg-rman
http://code.google.com/p/pg-rman/wiki/readme_ja
日本PostgreSQLユーザ会
89
ご清聴ありがとうございました

More Related Content

PDF
OSC東京2013/Spring_JPUG資料
PDF
PostgreSQLバックアップの基本
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PDF
明日から使えるPostgre sql運用管理テクニック(監視編)
PDF
まずやっとくPostgreSQLチューニング
PDF
いまさら聞けないPostgreSQL運用管理
PDF
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PDF
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
OSC東京2013/Spring_JPUG資料
PostgreSQLバックアップの基本
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
明日から使えるPostgre sql運用管理テクニック(監視編)
まずやっとくPostgreSQLチューニング
いまさら聞けないPostgreSQL運用管理
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)

What's hot (20)

PDF
あなたの知らないPostgreSQL監視の世界
PDF
「今そこにある危機」を捉える ~ pg_stat_statements revisited
PDF
PostgreSQLアーキテクチャ入門
PDF
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PDF
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
PDF
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PDF
PostgreSQL10徹底解説
PDF
Jpug study-pq 20170121
PDF
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PDF
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PDF
OSS-DB Goldへの第一歩~実践!運用管理~
PDF
PostgreSQL安定運用のコツ2009 @hbstudy#5
PDF
OSC北海道2014_JPUG資料
PDF
外部データラッパによる PostgreSQL の拡張
PDF
C16 45分でわかるPostgreSQLの仕組み by 山田努
PDF
PL/Pythonで独自の集約関数を作ってみる
PDF
OSC沖縄2014_JPUG資料
PDF
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PDF
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
あなたの知らないPostgreSQL監視の世界
「今そこにある危機」を捉える ~ pg_stat_statements revisited
PostgreSQLアーキテクチャ入門
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
PostgreSQLの運用・監視にまつわるエトセトラ
BigDataを迎え撃つ! PostgreSQL並列分散ミドルウェア「Stado」の紹介と検証報告
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQL10徹底解説
Jpug study-pq 20170121
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
OSS-DB Goldへの第一歩~実践!運用管理~
PostgreSQL安定運用のコツ2009 @hbstudy#5
OSC北海道2014_JPUG資料
外部データラッパによる PostgreSQL の拡張
C16 45分でわかるPostgreSQLの仕組み by 山田努
PL/Pythonで独自の集約関数を作ってみる
OSC沖縄2014_JPUG資料
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
Ad

Similar to JPUG 沖縄支部セミナー資料(2013-04-27) (20)

PDF
PostgreSQLレプリケーション(pgcon17j_t4)
PDF
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
PDF
PostgreSQL9.3新機能紹介
PDF
Sql server 構築 運用 tips
PDF
Jjugccc2017spring-postgres-ccc_m1
PDF
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
PPTX
OSC2015nagoya
PDF
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
PDF
Chugoku db 20th-postgresql-10-pub
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PDF
MySQLとPostgreSQLの基本的なバックアップ比較
PDF
20181110 fok2018-pg-extension
PDF
20210511_PGStrom_GpuCache
PPT
Pgcon2012 ori-20120224
PDF
Extending PostgreSQL - PgDay 2012 Japan
PDF
20190119 aws-study-pg-extension
PDF
JTF2021w F3 postgresql frontline
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PDF
Chugokudb18_2
PDF
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
PostgreSQLレプリケーション(pgcon17j_t4)
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
PostgreSQL9.3新機能紹介
Sql server 構築 運用 tips
Jjugccc2017spring-postgres-ccc_m1
SSDとGPUがPostgreSQLを加速する【OSC.Enterprise】
OSC2015nagoya
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
Chugoku db 20th-postgresql-10-pub
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
MySQLとPostgreSQLの基本的なバックアップ比較
20181110 fok2018-pg-extension
20210511_PGStrom_GpuCache
Pgcon2012 ori-20120224
Extending PostgreSQL - PgDay 2012 Japan
20190119 aws-study-pg-extension
JTF2021w F3 postgresql frontline
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
Chugokudb18_2
GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
Ad

JPUG 沖縄支部セミナー資料(2013-04-27)