×
  • Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
 

OSC北海道2014_JPUG資料

on

  • 89 views

2014年6月14日のオープンソースカンファレンス2014 Hokkaidoのセッション「PostgreSQL バックアップ&リカバリ入門」での資料です。

2014年6月14日のオープンソースカンファレンス2014 Hokkaidoのセッション「PostgreSQL バックアップ&リカバリ入門」での資料です。

Statistics

Views

Total Views
89
Views on SlideShare
88
Embed Views
1

Actions

Likes
0
Downloads
2
Comments
0

1 Embed 1

https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via SlideShare as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    OSC北海道2014_JPUG資料 OSC北海道2014_JPUG資料 Presentation Transcript

    • 日本PostgreSQLユーザ会 1 PostgreSQL バックアップ & リカバリ 入門 オープンソースカンファレンス2014 Hokkaido 2014-06-14 日本PostgreSQLユーザ会 佐藤 千佳
    • 日本PostgreSQLユーザ会 2 自己紹介 佐藤 千佳(さとう ちか)@nasa_chik 2007 年ごろからPostgreSQLを触っています 機能調査、周辺ツールを含めた性能評価を実施しています ときどきPostgreSQLのイベントやユーザ会の勉強会などで 話をしています
    • 日本PostgreSQLユーザ会 3 本日のながれ 1. PostgreSQL の紹介 2. バックアップ&リカバリとは 3. PostgreSQL で使用可能なバックアップ&リカバリ 4. PostgreSQL のアーキテクチャ 5. PostgreSQL のバックアップ&リカバリ方法 6. ツールの紹介
    • 日本PostgreSQLユーザ会 4 PostgreSQL の紹介
    • 日本PostgreSQLユーザ会 5 PostgreSQL とは...(1) 代表的なオープンソースの ORDBMS PostgreSQL ライセンスで配布 BSD ライセンスに類似 Linux をはじめほとんどの UNIX 系 OS で動く Windows や Mac OS X でも動く 日本語サイトが充実している 最新版の日本語ドキュメントがすぐにリリースされる 活発な意見交換の場(ML/勉強会/懇親会という名の...) 皆さん親切 … 等
    • 日本PostgreSQLユーザ会 6 日本語ドキュメントサイト PostgreSQL とは...(2)
    • 日本PostgreSQLユーザ会 7 PostgreSQLのポータルサイト「Let's Postgres」 PostgreSQL とは...(3)
    • 日本PostgreSQLユーザ会 8 PostgreSQLのポータルサイト「Let's Postgres」 詳しくは Web で ! PostgreSQL とは...(3)
    • 日本PostgreSQLユーザ会 9 バックアップ & リカバリとは
    • 日本PostgreSQLユーザ会 10 バックアップ・リカバリとは...(1) バックアップとは 不測の事態に備え、データベースの内容を別ファイルに保存し ておくこと 物理バックアップ データベースを構成するファイル群を物理的に別の媒体へ コピーする 論理バックアップ 表の定義や格納されているデータなどをファイルに出力す る
    • 日本PostgreSQLユーザ会 11 バックアップとは データベースの内容を別ファイルに保存しておくこと 物理バックアップ データベースを構成するファイル群を物理的に別の媒体へ コピーする バックアップ データベース DB1 DB2 データベース DB1 DB2 バックアップ領域 バックアップ・リカバリとは...(2)
    • 日本PostgreSQLユーザ会 12 データベース 社員表を バックアップ --- 社員表テーブル定義 CREATE TABLE 社員( ・・・ ); --- 社員表のデータ 100 田中 101 佐藤 102 鈴木 ・・・ バックアップとは データベースの内容を別ファイルに保存しておくこと 論理バックアップ 表の定義や格納されているデータなどをファイルに出力す る 社員表の表定義と格納さ れていたデータがバック アップされる バックアップ・リカバリとは...(3)
    • 日本PostgreSQLユーザ会 13 (リストア&)リカバリとは 失ったデータをバックアップファイルを使って復旧すること ユーザーによるオペレーションミス メディア障害 システム障害 自然災害 ディスクのミラーリングだけで安心していませ んか ? ・ オペレーションミスは救えません ・ ミラーリングはバックアップではありません … 等 バックアップ・リカバリとは...(4)
    • 日本PostgreSQLユーザ会 14 バックアップ領域 時間 バックアップ 表の定義や格納されてい るデータなどを抽出 日曜日 金曜日 データベース DB1 DB2 データベース DB1 DB2 データベース DB1 DB2 --- 社員表テーブル定義 CREATE TABLE 社員( ・・・ ); --- 社員表のデータ INSERT INTO 社員( 101, 佐藤 ); ・・・ リストア バックアップデータを再 ロード 論理バックアップのイメージと用語 リストア後のデータベースは バックアップ取得時点の内容
    • 日本PostgreSQLユーザ会 15 時間 バックアップ データベースを構成する ファイルのコピーを別の場 所に保存日曜日 金曜日 データベース DB1 DB2 データベース DB1 DB2 データベース DB1 DB2 リストア バックアップファイルを破損 したファイルの代わりに配置 物理バックアップのイメージと用語 バックアップ領域 データベース DB1 DB2 変更 ログ 変更 ログ リカバリ バックアップ取得以降にデータベー スに行われた変更ログを反映
    • 日本PostgreSQLユーザ会 16 時間 バックアップ データベースを構成する ファイルのコピーを別の場 所に保存日曜日 金曜日 データベース DB1 DB2 データベース DB1 DB2 データベース DB1 DB2 リストア バックアップファイルを破損 したファイルの代わりに配置 物理バックアップのイメージと用語 バックアップ領域 データベース DB1 DB2 変更 ログ 変更 ログ リカバリ バックアップ取得以降にデータベー スに行われた変更ログを反映 リストアのみの場合  データベースはバックアップ取得時点の内容 リカバリまで行った場合  データベースはクラッシュ直前の内容まで戻せる  (変更ログが残っている場合)
    • 日本PostgreSQLユーザ会 17 PostgreSQLで使用可能な バックアップ・リカバリ
    • 日本PostgreSQLユーザ会 18 PostgreSQLで使用可能なバックアップ・リカバリ(1) 物理バックアップとリストア 設定ファイルから丸ごとバックアップできる! コールドバックアップとリストア 論理バックアップとリストア メジャーバージョンアップ時のデータ移行や、異なるCPU アーキテクチャ環境への移行にも使える! ホットバックアップとリストア
    • 日本PostgreSQLユーザ会 19 物理バックアップとPITR 最新の状態から任意の時点まで、好みに合わせてリカバリで きる! ポイント・イン・タイム・リカバリ (Point-In-Time Recovery) PostgreSQLで使用可能なバックアップ・リカバリ(2)
    • 日本PostgreSQLユーザ会 20 ① コールドバックアップとリストア ② ホットバックアップとリストア ③ ポイント・イン・タイム・リカバリ PostgreSQLで使用可能なバックアップ・リカバリ(3)
    • 日本PostgreSQLユーザ会 21 PostgreSQL のアーキテクチャ
    • 日本PostgreSQLユーザ会 22 PostgreSQL アーキテクチャ 「超」入門(1) アプリケーション 各種 プロセス群 トランザクション ログ アーカイブ ログ データベース・クラスタ $PGDATA データ ベースデータ ベースデータ ベース PostgreSQL 問い合わせ 書き込み 読み込み 書き込み書き込み
    • 日本PostgreSQLユーザ会 23 データベース・クラスタのファイル構造の一部 ~ $PGDATA ~ ・・・ データベース・クラスタ ・・・ トランザクション・ログ格納ディレクトリ ・・・ パラメータ・ファイル ・・・ クライアント認証設定ファイル データベース・クラスタで共有する テーブルの格納ディレクトリ postmaster.pid pg_hba.conf postgresql.conf global/ pg_tblspc/ base/ テーブルスペースへのシンボリック リンク格納ディレクトリ ・・・ ・・・ データベース格納ディレクトリ ・・・ 起動中のPostgreSQL のプロセスID 記録ファイル(サーバ起動時のみ存在) ・・・ PostgreSQL アーキテクチャ 「超」入門(2) pg_xlog/
    • 日本PostgreSQLユーザ会 24 データベース・クラスタのファイル構造の一部 ~ $PGDATA ~ ・・・ データベース・クラスタ ・・・ トランザクション・ログ格納ディレクトリ ・・・ パラメータ・ファイル ・・・ クライアント認証設定ファイル データベース・クラスタで共有する テーブルの格納ディレクトリ postmaster.pid pg_hba.conf postgresql.conf global/ pg_tblspc/ base/ テーブルスペースへのシンボリック リンク格納ディレクトリ ・・・ ・・・ データベース格納ディレクトリ ・・・ 起動中のPostgreSQL のプロセスID 記録ファイル(サーバ起動時のみ存在) ・・・ PostgreSQL アーキテクチャ 「超」入門(2) pg_xlog/ データベースに対する変更履歴の 記録ファイルを格納 ⇒一般的にトランザクションログ とよばれている PostgreSQL 界ではこのディレ クトリに格納されているファイル を WAL (ワル)とよぶ ⇒Write Ahead Log の略
    • 日本PostgreSQLユーザ会 25 PostgreSQL アーキテクチャ 「超」入門(3) アプリケーション 各種 プロセス群 pg_xlogアーカイブ ログ データ ベースデータ ベースデータ ベース PostgreSQL 問い合わせ 書き込み 読み込み 書き込み書き込み $PGDATA
    • 日本PostgreSQLユーザ会 26 PostgreSQL アーキテクチャ 「超」入門(3) アプリケーション 各種 プロセス群 アーカイブ ログ データ ベースデータ ベースデータ ベース PostgreSQL $PGDATA WAL WALWAL pg_xlog
    • 日本PostgreSQLユーザ会 27 PostgreSQL アーキテクチャ 「超」入門(4) アプリケーション 各種 プロセス群 アーカイブ ログ データ ベースデータ ベースデータ ベース PostgreSQL WAL WALWAL pg_xlog
    • 日本PostgreSQLユーザ会 28 WAL(トランザクションログ)とアーカイブログ WAL 1 WAL 2 WAL 3 WAL 4 WAL 2 WAL 3 WAL 4 WAL 5 これでは過去の 変更ログが なくなってしまう!! 上書き(回収) される たまった WAL は PostgreSQL に 不要と判断されると… PostgreSQL アーキテクチャ 「超」入門(5)
    • 日本PostgreSQLユーザ会 29 WAL(トランザクションログ)とアーカイブログ WAL 1 WAL 2 WAL 3 WAL 4 WAL 2 WAL 3 WAL 4 WAL 5 WAL 1 これが アーカイブログ (WALアーカイブ)上書きされる前に WAL をコピー! PostgreSQL アーキテクチャ 「超」入門(6)
    • 日本PostgreSQLユーザ会 30 PostgreSQL アーキテクチャ 「超」入門(7) 各種 プロセス群 データ ベースデータ ベースデータ ベース PostgreSQL $PGDATA WAL WALWAL pg_xlog WAL を コピーしたもの データベースへ の変更ログ 用語の整理 WAL アーカイブ コピー WALコピー WAL コピー WAL
    • 日本PostgreSQLユーザ会 31 PostgreSQL の バックアップ & リカバリ方法
    • 日本PostgreSQLユーザ会 32 PostgreSQL のバックアップ & リカバリ方法 ① コールドバックアップとリストア ② ホットバックアップとリストア ③ ポイント・イン・タイム・リカバリ
    • 日本PostgreSQLユーザ会 33 PostgreSQL のバックアップ & リカバリ方法 ① コールドバックアップとリストア ② ホットバックアップとリストア ③ ポイント・イン・タイム・リカバリ
    • 日本PostgreSQLユーザ会 34 コールドバックアップとリストア(1) バックアップの流れ 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ユーザ会 35 リストアの流れ 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 コールドバックアップとリストア(2)
    • 日本PostgreSQLユーザ会 36 時間 $PGDATA ① 日曜日 バックアップ取得 ② 金曜日  障害発生 この間のデータは失われる ③ $PGDATAを バックアップファイルで置き換える 日曜日時点のデータ $PGDATA データベース 停止 データベース 起動 データベース 起動 データベース 停止 リストア時間 バックアップ 取得時間 コールドバックアップとリストア(3) バックアップ ファイル
    • 日本PostgreSQLユーザ会 37 良いところ 手順がシンプル データベース・クラスタ全体をバックアップした場合、他のバック アップ方法と比較して処理が短時間で済む 注意点 データベースを停止する必要がある バックアップを取得したタイミングにしか復旧できない バックアップ・リストア対象はデータベース・クラスタ全体 (テーブル単位、データベース単位の操作はできない) コールドバックアップとリストア(4)
    • 日本PostgreSQLユーザ会 38 ① コールドバックアップとリストア ② ホットバックアップとリストア ③ ポイント・イン・タイム・リカバリ PostgreSQL のバックアップ & リカバリ方法
    • 日本PostgreSQLユーザ会 39 ホットバックアップとリストア(1) バックアップの流れ 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ユーザ会 40 pg_dump と pg_dumpall の違い 論理バックアップには 2 つの方法がある pg_dump テーブル単位、データベース単位にバックアップ pg_dumpall データベース・クラスタに格納してある全てのデータベースを バックアップ ホットバックアップとリストア(2)
    • 日本PostgreSQLユーザ会 41 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 ホットバックアップとリストア(3)
    • 日本PostgreSQLユーザ会 42 pg_dump と pg_dumpall の違い(つづき) 3. ディレクトリ形式 バイナリ形式のバックアップを作成 テーブル単位で圧縮されたバックアップファイルを作成         4. tar 形式 バイナリ形式のバックアップを作成 テーブル単位でバックアップファイルを作成 $ pg_dump --format=directory mydb -f mydb_dump.directory $ pg_dump --format=tar mydb > mydb_dump.tar ホットバックアップとリストア(4)
    • 日本PostgreSQLユーザ会 43 pg_dump と pg_dumpall の違い(つづき) pg_dumpall のバックアップ形式は 1 種類 1. 平文形式 SQL文によるスクリプトファイルを作成 $ pg_dumpall > mydb_dumpall.sql ホットバックアップとリストア(5)
    • 日本PostgreSQLユーザ会 44 リストアの流れ 1.データベースが起動していることを確認 2.psql または pg_restore コマンドでリストア $ pg_ctl status pg_ctl: server is running (PID: xxxxx) $ psql -f mydb_dump.sql 必要に応じて、 データベース・クラスタ やデータベースは事前に 作成しておく ホットバックアップとリストア(6)
    • 日本PostgreSQLユーザ会 45 リストアコマンドの違い バックアップ形式によってリストア方法が異なる 平文形式で取得した場合 : psql コマンド 平文形式で以外で取得した場合 : pg_restore コマンド $ pg_restore -C -d postgres < mydb_dump.custom $ psql -f mydb_dump.sql ホットバックアップとリストア(7)
    • 日本PostgreSQLユーザ会 46 バックアップ コマンド バックアップ 単位 出力形式 リストア コマンド pg_dump テーブル単位 データベース単位 平文(SQL) psql カスタム pg_restoreディレクトリ tar pg_dumpall 全てのデータベース 平文(SQL) psql コマンド対応表 ホットバックアップとリストア(8)
    • 日本PostgreSQLユーザ会 47 時間 $PGDATA ① 日曜日 バックアップ取得 ② 金曜日  障害発生 この間のデータは失われる ③ psql または pg_restore コマンドで リストア 日曜日時点のデータ $PGDATA データベース起動データベース停止 リストア時間 バックアップ ファイル ホットバックアップとリストア(9)
    • 日本PostgreSQLユーザ会 48 良いところ バックアップ取得時にデータベースを停止する必要がない クライアント環境から実行できる CPU アーキテクチャの異なるマシンにリストアできる PostgreSQL のメジャーバージョンアップに使用できる データのみ、スキーマのみでのバックアップが可能 データベース単位、テーブル単位でバックアップが可能(pg_dumpのみ) 注意点 バックアップを開始したタイミングにしか復旧できない 他のバックアップ・リストアと比較すると処理時間が長い 設定ファイルなどのバックアップが別途必要になる ホットバックアップとリストア(10)
    • 日本PostgreSQLユーザ会 49 ① コールドバックアップとリストア ② ホットバックアップとリストア ③ ポイント・イン・タイム・リカバリ PostgreSQL のバックアップ & リカバリ方法
    • 日本PostgreSQLユーザ会 50 バックアップ ファイル 時間 障害発生バックアップ取得 バックアップ ファイル データべースへ の 変更ログ pg_start_backup() pg_stop_backup() ポイント・イン・タイム・リカバリ(1) ポイント・イン・タイム・リカバリの流れ $PGDATA WAL データ ベース
    • 日本PostgreSQLユーザ会 51 $ cat $PGDATA/postgresql.conf ~~ 略 ~~ wal_level = archive  # PostgreSQL9.0 ~ のパラメータ archive_mode = on archive_command = '/bin/cp -i %p /mnt/server/archivedir/%f' WAL をアーカイブするよ うに設定 ベースバックアップの取得 ① パラメータの変更 ポイント・イン・タイム・リカバリ(2) pg_xlog データ ベース $PGDATA ※ 注意 ※ このパラメータを変更し た場合、PostgreSQL の 再起動が必要 !!
    • 日本PostgreSQLユーザ会 52 $ psql -c "SELECT pg_start_backup(label)" pg_start_backup ----------------- 0/13000020 (1 row) ()の中はメモ。 取得日時などに設定して おくと分かりやすい ベースバックアップの取得 ② バックアップの開始を記録する ポイント・イン・タイム・リカバリ(3) pg_xlog データ ベース $PGDATA
    • 日本PostgreSQLユーザ会 53 $BACKUP/pgdata $ rsync -av --delete --exclude=pg_xlog --exclude=postmaster.pid $PGDATA/ $BACKUP/pgdata ③ $PGDATA をコピー ベースバックアップの取得 rsync での 取得がオススメ ポイント・イン・タイム・リカバリ(4) ストレージスナップ ショットなどもOK! pg_xlog データ ベース $PGDATA
    • 日本PostgreSQLユーザ会 54 $ psql -c "SELECT pg_stop_backup()" pg_stop_backup ---------------- 0/130000A8 (1 row) ④ バックアップの終了を記録する ベースバックアップの取得 ポイント・イン・タイム・リカバリ(5) $BACKUP/pgdata ベースバックアップ pg_xlog データ ベース $PGDATA
    • 日本PostgreSQLユーザ会 55 ベース バックアップ 時間 ② ベースバックアップ 取得 ポイント・イン・タイム・リカバリ(6) ② pg_stop_backup()① pg_start_backup() pg_xlog データ ベース $PGDATA ベースバックアップの取得
    • 日本PostgreSQLユーザ会 56 ベース バックアップ 時間 ポイント・イン・タイム・リカバリ(6) データ ベース $PGDATA ベースバックアップ取得中… ② pg_stop_backup()① pg_start_backup() ベースバックアップの取得
    • 日本PostgreSQLユーザ会 57 WAL1 WAL2 WAL3 WALアーカイブ WAL1 WAL2 WAL3 WAL4 pg_xlog 時間 ポイント・イン・タイム・リカバリ(6) データ ベース $PGDATA ベースバックアップ取得中… ② pg_stop_backup()① pg_start_backup() ベースバックアップの取得
    • 日本PostgreSQLユーザ会 58 ベースバックアップの取得 WAL1 WAL2 WAL3 WALアーカイブ WAL1 WAL2 WAL3 WAL4 pg_xlog 時間 ポイント・イン・タイム・リカバリ(6) データ ベース $PGDATA ベースバックアップ取得中… ② pg_stop_backup()① pg_start_backup() ベースバックアップ + WALアーカイブ + WAL のセットで整合性の取れたデータ
    • 日本PostgreSQLユーザ会 59 ベースバックアップの取得について PostgreSQL 9.1 から pg_basebackup コマンドを使ってベースバッ クアップの取得が可能!! コマンド 1 つでベースバックアップを取得 クライアント環境からも実行可能 バックアップ取得用のデータベースサーバのOSアカウントが不要 REPLICATION権限があればスーパーユーザでなくても利用可能 ポイント・イン・タイム・リカバリ(7) $ pg_basebackup -D $BACKUP/pgdata -X s -P -h dbserver1 -U repl 102640/102640 kB (100%), 1/1 tablespace
    • 日本PostgreSQLユーザ会 60 ベースバックアップの取得について PostgreSQL 9.1 から pg_basebackup コマンドを使ってベースバッ クアップの取得が可能!! コマンド 1 つでベースバックアップを取得 クライアント環境からも実行可能 バックアップ取得用のデータベースサーバのOSアカウントが不要 REPLICATION権限があればスーパーユーザでなくても利用可能 ポイント・イン・タイム・リカバリ(7) max_wal_senders パラメータを変更 ※ 注意 ※ このパラメータを変更し た場合、PostgreSQL の 再起動が必要 !! $ pg_basebackup -D $BACKUP/pgdata -X s -P -h dbserver1 -U repl 102640/102640 kB (100%), 1/1 tablespace
    • 日本PostgreSQLユーザ会 61 PITR 時間 ベース バックアップ WAL 1 WAL 2 WAL 3 WAL 4 ポイント・イン・タイム・リカバリ(8) pg_xlog データ ベース $PGDATA ① 日曜日 バックアップ取得 ② 金曜日  障害発生 WAL 5 WAL アーカイブ WAL 1 WAL 2 WAL 3
    • 日本PostgreSQLユーザ会 62 PITR ① データベースの強制終了 $ pg_ctl stop -m immediate -D $PGDATA waiting for server to shut down.... done server stopped ポイント・イン・タイム・リカバリ(9) pg_xlog データ ベース $PGDATA ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3
    • 日本PostgreSQLユーザ会 63 WAL 1 WAL 2 WAL 3 WAL 4 WAL 5 ポイント・イン・タイム・リカバリ(10) pg_xlog データ ベース $PGDATA ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 PITR
    • 日本PostgreSQLユーザ会 64 アーカイブされる 前の WAL ポイント・イン・タイム・リカバリ(10) pg_xlog データ ベース $PGDATA ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 WAL 1 WAL 2 WAL 3 WAL 4 WAL 5 PITR
    • 日本PostgreSQLユーザ会 65 pg_xlog データ ベース $PGDATA アーカイブされる前の WAL を含む ディレクトリ(pg_xlog) ポイント・イン・タイム・リカバリ(10) ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 WAL 1 WAL 2 WAL 3 WAL 4 WAL 5 PITR
    • 日本PostgreSQLユーザ会 66 WAL 1 WAL 2 WAL 3 WAL 4 WAL 5 ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 ② アーカイブされる前のWALを含む pg_xlog ディレクトリを   バックアップ $ rsync -av $PGDATA/pg_xlog/ $BACKUP_XLOG $PGDATA pg_xlog データ ベース $PGDATA $BACKUP_XLOG WAL 4 WAL 5 ポイント・イン・タイム・リカバリ(10) PITR
    • 日本PostgreSQLユーザ会 67 pg_xlog データ ベース $PGDATA PITR $ tar cvfh $SAVE/pgdata_old.tar $PGDATA $ rm -rf $PGDATA ③ 既存のデータベース・クラスタを退避後 破棄する ポイント・イン・タイム・リカバリ(11) ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 $BACKUP_XLOG WAL 4 WAL 5
    • 日本PostgreSQLユーザ会 68 PITR $ rsync -av $BACKUP/pgdata/* $PGDATA ④ $PGDATAをベースバックアップで   置き換える 日曜日 時点 のデータベース ポイント・イン・タイム・リカバリ(12) ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 $BACKUP_XLOG WAL 4 WAL 5 pg_xlog データ ベース $PGDATA
    • 日本PostgreSQLユーザ会 69 PITR $ rsync -av $BACKUP/pgdata/* $PGDATA ④ $PGDATAをベースバックアップで   置き換える 日曜日 時点 のデータベース ポイント・イン・タイム・リカバリ(12) $PGDATA のパーミッションは 700 ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 $BACKUP_XLOG WAL 4 WAL 5 pg_xlog データ ベース $PGDATA
    • 日本PostgreSQLユーザ会 70 $BACKUP_XLOG WAL 4 WAL 5 $PGDATA pg_xlog データ ベース $PGDATA PITR $ rm -rf $PGDATA/pg_xlog $ rsync -av $BACKUP/pgxlog/pg_xlog $PGDATA ⑤ 手順②で取得したWALファイルを $PGDATA/pg_xlog 配下に配置 ポイント・イン・タイム・リカバリ(13) ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3
    • 日本PostgreSQLユーザ会 71 $BACKUP_XLOG WAL 4 WAL 5 $PGDATA pg_xlog データ ベース $PGDATA PITR $ rm -rf $PGDATA/pg_xlog $ rsync -av $BACKUP/pgxlog/pg_xlog $PGDATA ⑤ 手順②で取得したWALファイルを $PGDATA/pg_xlog 配下に配置 ベースバックアップに古い pg_xlogが含まれている 場合は事前に削除する ポイント・イン・タイム・リカバリ(14) ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3
    • 日本PostgreSQLユーザ会 72 $ cat $PGDATA/recovery.conf ~~ 略 ~~ restore_command = 'cp /mnt/server/archivedir/%f "%p" ' PITR ⑥ recovery.conf の作成 ポイント・イン・タイム・リカバリ(15) recovery_target_time パラメータを指定することでリカ バリしたい”任意の時刻”を指定す ることもできる ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 $BACKUP_XLOG WAL 4 WAL 5
    • 日本PostgreSQLユーザ会 73 PITR ⑦ PostgreSQL の起動 $ pg_ctl start -D $PGDATA server starting ポイント・イン・タイム・リカバリ(16) $PGDATA pg_xlog データ ベース $PGDATA ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 $BACKUP_XLOG WAL 4 WAL 5
    • 日本PostgreSQLユーザ会 74 PostgreSQL 起動後の内部の動き PITR WAL アーカイブ WAL 1 WAL 2 WAL 3 日曜日 時点 のデータベース ポイント・イン・タイム・リカバリ(17) $PGDATA pg_xlog データ ベース $PGDATA
    • 日本PostgreSQLユーザ会 75 PostgreSQL 起動後の内部の動き $PGDATA pg_xlog データ ベース $PGDATA WAL アーカイブ WAL 1 WAL 2 WAL 3 ① ベースバックアップ取得以降に発 生した WAL アーカイブを適用 (recovery.conf で指定) ポイント・イン・タイム・リカバリ(17) PITR
    • 日本PostgreSQLユーザ会 76 PostgreSQL 起動後の内部の動き WAL アーカイブ WAL 1 WAL 2 WAL 3 ポイント・イン・タイム・リカバリ(17) $PGDATA pg_xlog データ ベース $PGDATA WAL3 まで適用された データベース PITR
    • 日本PostgreSQLユーザ会 77 PostgreSQL 起動後の内部の動き WAL アーカイブ WAL 1 WAL 2 WAL 3 ② アーカイブされなかった 最新のWAL を適用 ポイント・イン・タイム・リカバリ(17) $PGDATA データ ベース $PGDATA WAL3 まで適用された データベース pg_xlog PITR
    • 日本PostgreSQLユーザ会 78 ⑧ リカバリ完了 リカバリが完了し、データベースに接続できるようになると、 PostgreSQL のログに以下のメッセージが出力される LOG: archive recovery complete LOG: database system is ready to accept connections ポイント・イン・タイム・リカバリ(18) pg_xlog データ ベース $PGDATA PITR ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 $BACKUP_XLOG WAL 4 WAL 5
    • 日本PostgreSQLユーザ会 79 ⑨ データベースの内容を確認 ポイント・イン・タイム・リカバリ(19) PITR ベース バックアップ 日曜日に取得 WAL アーカイブ WAL 1 WAL 2 WAL 3 $BACKUP_XLOG WAL 4 WAL 5 pg_xlog データ ベース $PGDATA
    • 日本PostgreSQLユーザ会 80 良いところ サービスを継続したままベースバックアップが取得できる 指定した任意の時刻まで復旧できる 障害発生直前の ”最新” の状態まで復旧できる 注意点 手順が複雑 WALアーカイブを取得している必要がある バックアップ・リカバリ対象はデータベース・クラスタ全体 (テーブル単位、データベース単位の操作はできない) ポイント・イン・タイム・リカバリ(20)
    • 日本PostgreSQLユーザ会 81 コールドバックアップと リストア ホットバックアップと リストア ポイント・イン・ タイムリカバリ バックアップ タイプ 物理バックアップ (オフライン) 論理バックアップ 物理バックアップ (オンライン) バックアップ方法 cpコマンド, tarコマンド, rsyncコマンド, ストレージ スナップショットなど pg_dump / pg_dumpall ① pg_start_backup() ② cpコマンド, tarコマン ド, rsyncコマンドなど ③ pg_stop_backup() / pg_basebackup (PostgreSQL9.1~) (リストア)リカバリ方法 特になし pg_restore / psql (PITR 機能) どこまで戻せるか バックアップ時点 バックアップ時点 任意の時点 バックアップの 最小単位 データベース クラスタ テーブル(pg_dump) データベース クラスタ WALアーカイブ 不要 不要 必要 バックアップ中の データベースの停止 必要 不要 不要 クライアント環境 からの実行 不可 可能 不可 (pg_basebackup可能) まとめ
    • 日本PostgreSQLユーザ会 82 コールドバックアップと リストア ホットバックアップと リストア ポイント・イン・ タイムリカバリ バックアップ タイプ 物理バックアップ (オフライン) 論理バックアップ 物理バックアップ (オンライン) バックアップ方法 cpコマンド, tarコマンド, rsyncコマンド, ストレージ スナップショットなど pg_dump / pg_dumpall ① pg_start_backup() ② cpコマンド, tarコマン ド, rsyncコマンドなど ③ pg_stop_backup() / pg_basebackup (PostgreSQL9.1~) (リストア)リカバリ方法 特になし pg_restore / psql (PITR 機能) どこまで戻せるか バックアップ時点 バックアップ時点 任意の時点 バックアップの 最小単位 データベース クラスタ テーブル(pg_dump) データベース クラスタ WALアーカイブ 不要 不要 必要 バックアップ中の データベースの停止 必要 不要 不要 クライアント環境 からの実行 不可 可能 不可 (pg_basebackup可能) まとめ さまざまな制約事項の中から、そのシステムに あったバックアップ・リカバリ方法を !!
    • 日本PostgreSQLユーザ会 83 ツールの紹介
    • 日本PostgreSQLユーザ会 84 pg_rman
    • 日本PostgreSQLユーザ会 85 pg_rman PostgreSQL のバックアップとリカバリを管理するツール PostgreSQL の外部ツール Sourceforge からダウンロード可能 複雑な PITR の手順をコマンド 1 つで簡単に実行 増分バックアップや世代管理も可能 自動メンテナンス機能付き ストレージ・スナップショットをサポート Linux などの UNIX 系 OS で動 きます
    • 日本PostgreSQLユーザ会 86 事前準備(バックアップカタログの初期化)     バックアップ取得 フルバックアップの取得            バックアップの検証 [satock@server2]$ pg_rman init -B /array_1/satock/pg_rman/sever2 -D ~/pgdata INFO: ARCLOG_PATH is set to '/home/satock/arc' INFO: SRVLOG_PATH is set to '/home/satock/pgdata/pg_log' [satock@server2]$ pg_rman backup –b full -B /array_1/satock/pg_rman/server2 -D ~/pgdata INFO: database backup start NOTICE: pg_stop_backup complete, all required WAL segments have been archived [satock@server2]$ pg_rman validate -B /array_1/satock/pg_rman/server2 -D ~/pgdata INFO: validate: 2014-05-29 11:29:01 backup and archive log files by CRC pg_rmanバックアップの流れ
    • 日本PostgreSQLユーザ会 87 リストア(&リカバリ) その他の管理コマンド pg_rman delete DATE 指定した DATE より前に取得したバックアップを削除 削除対象に最新のフルバックアップが含まれる場合は削除できない pg_rman show バックアップ履歴を表示 pg_rman show timeline 取得済みバックアップのタイムラインとバックアップモードを表示 [satock@server2]$ pg_rman restore -B /array_1/satock/pg_rman/server2 -D ~/pgdata INFO: validate: 2014-05-29 11:29:01 backup and archive log files by SIZE INFO: validate: 2014-05-29 11:50:39 backup and archive log files by SIZE INFO: restore complete. Recovery starts automatically when the PostgreSQL server is started. [satock@server2]$ pg_ctl start -D ~/pgdata pg_rmanリストアの流れ
    • 日本PostgreSQLユーザ会 88 Barman
    • 日本PostgreSQLユーザ会 89 Barman PostgreSQL のバックアップとリカバリを管理するツール PostgreSQL の外部ツール Sourceforge からダウンロード可能 複雑な PITR の手順をコマンド 1 つで簡単に実行 ローカル、リモートでのバックアップ取得 複数サーバのバックアップ取得 自動メンテナンス機能付き バックアップ時のI/O、ネットワーク帯域の上限指定 Linux などの UNIX 系 OS で動 きます
    • 日本PostgreSQLユーザ会 90 バックアップ取得 (リストア&)リカバリ [satock@backup]$ barman backup dbserver1 Starting backup for server dbserver1 in /array_1/satock/barman/dbserver1/base/20140521T145558 Backup start at xlog location: 1/23000020 (000000070000000100000023, 00000020) Copying files. Copy done. Asking PostgreSQL server to finalize the backup. Backup end at xlog location: 1/230000A8 (000000070000000100000023, 000000A8) Backup completed Barmanバックアップ、リカバリの流れ [satock@backup]$ barman recover --remote-ssh-command "ssh satock@dbserver2" dbserver1 ¥ 20140524T195903 /home/satock/recover_pgdata
    • 日本PostgreSQLユーザ会 91 参考文献 書籍 PostgreSQL 完全攻略ガイド (技術評論社) オンラインドキュメント類 PostgreSQL 9.3.2文書 http://www.postgresql.jp/document/9.3/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://sourceforge.net/projects/pg-rman/ Barman http://sourceforge.net/projects/pgbarman/
    • 日本PostgreSQLユーザ会 92 ご清聴ありがとうございました