jpug 沖縄支部セミナー資料(2013-04-27)
DESCRIPTION
2013年4月27日のJPUG 沖縄支部セミナーでの資料です。 この資料は、2013年2月23日のオープンソースカンファレンス2013 Tokyo/Spring のセッション「PostgreSQL バックアップ&リカバリ入門」での資料を追加・修正したものになります。TRANSCRIPT
PostgreSQLバックアップ & リカバリ 入門
沖縄支部セミナー
2013-04-27
株式会社 メトロシステムズ佐藤 千佳
日本PostgreSQLユーザ会 2
自己紹介
佐藤 千佳 (さとう ちか)
所属: 株式会社メトロシステムズ(東京・池袋)
Mail: [email protected]
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)
バックアップとは
データベースの内容を別ファイルに保存しておくこと
物理バックアップ
データベースを構成するファイル群を物理的に別の媒体へコピーする
バックアップ
データベース
DB1DB2
データベース
DB1DB2
バックアップ領域
日本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
WALWAL
WAL
pg_xlog
$PGDATA
日本PostgreSQLユーザ会 25
PostgreSQL アーキテクチャ 「超」入門(1/5)
アプリケーション 各種プロセス群
アーカイブログ
データベース
データベース
データベース
PostgreSQL
WALWAL
WAL
pg_xlog
日本PostgreSQLユーザ会 26
PostgreSQL アーキテクチャ 「超」入門(4/5)
WAL(トランザクションログ)とアーカイブログ
WAL 1WAL 2
WAL 3
WAL 4
WAL 2WAL 3
WAL 4
WAL 5
これでは過去の変更ログが
なくなってしまう!!
上書き(回収)される
たまった WAL はPostgreSQL に不要と判断されると・・・
日本PostgreSQLユーザ会 27
PostgreSQL アーキテクチャ 「超」入門(4/5)
WAL(トランザクションログ)とアーカイブログ
WAL 1WAL 2
WAL 3
WAL 4
WAL 2WAL 3
WAL 4
WAL 5
WAL 1
これがアーカイブログ(WALアーカイブ)上書きされる前に
WAL をコピー!
日本PostgreSQLユーザ会 28
PostgreSQL アーキテクチャ 「超」入門(5/5)
各種プロセス群
データベース
データベース
データベース
PostgreSQL用語の整理
WAL をコピーしたもの
データベースへの変更ログ
WALWAL
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.... doneserver 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.... doneserver 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 : RHEL6u1MEM : 2GBCPU : 2core/4threadDB サイズ(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 = onarchive_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 = onarchive_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.... doneserver 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 completeLOG: 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
ご清聴ありがとうございました