PostgreSQL初心者が勉強会で体験した、バックアップとリカバリの重要性

適切なバックアップとリカバリを!第29回しくみ+アプリケーション勉強会
去る5月31日(土)、秋葉原の産業技術大学院大学にて、日本PostgreSQLユーザ会主催の第29回しくみ+アプリケーション勉強会が開催されました。
本記事では、今年IT企業に入社したばかりの新人がPostgreSQLの勉強会に参加した様子を、初心者の視点からお伝えしていきます。
日本PostgreSQLユーザ会(JPUG)とは
日本PostgreSQLユーザ会(以下JPUG)は国内でのPostgreSQLの普及と発展を主な目的とした特定非営利活動(NPO)法人です。主な活動は以下の通りです。
- メーリングリストの運営
- PostgreSQL全般についての「pgsql-jp」と、PostgreSQL開発コミュニティ内の議論について情報交換する「hackers-jp」というメーリングリストが運営されています。
- ポータルサイト Let's Postgres の運営
- Let's Postgresは、PostgreSQLの情報を提供するポータルサイトです。PostgreSQLのインストール方法といった初心者向けの内容から、PostgreSQLの内部構造、ソースツリーといった上級者向けの内容まで、PostgreSQLを利用する上で有用な記事が幅広く公開されています。
参考:Let's Postgres - イベントの運営
- オープンソースカンファレンスの様なイベントで PostgreSQL に関する講演を行ったり、PostgreSQL Conference、PgDay といったイベントの開催、運営を行っています。
- PostgreSQL文書の翻訳
- PostgreSQLマニュアル等のドキュメント(英語)を日本語に翻訳しています。
- 勉強会の運営
- ソースプログラムやドキュメントを活用してPostgreSQLの内部構造やアーキテクチャを研究し、PostgreSQLへの理解を深めることを目的とした「しくみ分科会」が活動しています。活動の主体はPostgreSQLの知見を共有する勉強会で、年3、4回程度の頻度で開催されています。
勉強会当日の様子
今回行われた勉強会の講演内容は
- PostgreSQLのリカバリ超入門(鈴木啓修氏)
- バックアップ ことはじめ(佐藤千佳氏)
- PostgreSQLのデータ構造と内容を知る(笠原辰仁氏)
の3本です。いつもは深い内容の講演が多いそうですが、今回は入門的な内容も盛り込まれており、今後もこうした初心者向けの講演を増やしていくようです。
PostgreSQLのリカバリ入門
一本目はJPUGアプリケーション分科会座長の鈴木氏によるPostgreSQLのリカバリについての講演でした※1。
PostgreSQLはINSERTやUPDATEといったデータ操作をメモリ上で行いますが、サーバーがクラッシュしてしまうと更新データが失われてしまうため、そのような障害に備えてWAL(Write Ahead Logging)というファイルを作成します。WALにはデータの更新状況が書かれており、たとえサーバークラッシュがあってもWALに記録された更新データを再実行(REDO)することで、クラッシュ直前の状態までデータのリカバリが可能になります。
このWALを実際にどのように使用してリカバリを行うのか、またcheckpoint処理とリカバリの関係や、checkpointを生かしてオンラインバックアップを実行する方法などについての解説がされました。
この講演はPostgreSQLの処理の仕組みからバックアップ・リカバリを取得する方法までを、図をふんだんに盛り込んだスライドで解説されており、リカバリがどのように行われるのか、そのために必要なものは何かが、データベース初心者でも大変わかりやすく解説されていました。
※1)なんと講演資料のスライド100枚を約25分(!)で説明されていました。
バックアップことはじめ〜転ばぬ先のバックアップ〜
続いて、佐藤氏から「バックアップことはじめ」と題してバックアップとリカバリについての講演がありました。
PostgreSQLのバックアップは、下記のように様々な状況にあった方式があります。
- バックアップ取得直前までデータを復旧する方式
- バックアップ取得以降までデータを復旧する方式
- データベースを起動したまま行う方式
- データベースを停止して行う方式
これらの方式から、状況にあった適切なバックアップを選択する必要があります。
また、テーブルやデータベースを削除してしまった等、具体的な故障や操作ミスのケースを想定して、どのように対処すればよいかの解説がされました。
続いてバックアップのツールが幅広く紹介されました。
ここでは一般的によく使われているPostgreSQL標準ツールのpg_dump、ベースバックアップの取得方法から、あまり知られていないツールであるpg_rman、amanda、barmanといったものまで紹介されました。特にamanda、barmanは海外で開発されたツールで日本語の情報もあまりないことから、非常に貴重な内容でした。
バックアップは、初心者が独学で行うには混乱しがちなポイントも多いですが、解説を聞きながら表や図を見ることで、単なる丸覚えではなく状況に沿った最適なバックアップや手順を自分の中で整理することができました。また、バックアップが如何に大切かという格言も登場し、バックアップの重要度を感じることができました。

PostgreSQLのデータ構造と内部を知る
最後は笠原氏によるPostgreSQLのデータ構造やその内部を知るための有用なツールについての解説でした。
最初にテーブル、ログ、ファイルのそれぞれの名称と説明と格納先が紹介されました。PostgreSQLが扱うデータは、データベースクラスタ内で管理されており、その中は様々な役割を担うファイルが格納されていることがわかります。
続いて、開発、検証、運用時にPostgreSQLのデータ構造を確認したり、データを統計的に俯瞰する便利なツールが紹介されました。
例えば、テーブルやインデックスのページ構造を調べるツールpageinspectは、手軽に以下のような形でテーブルの状態を出力できるとのことでした。
非常にたくさんのツールを紹介して頂きましたが、実際にPostgreSQLを"運用する"ために役立つものや、内部構造を理解しないと使いこなせないものが多く、初心者にとっては少し難しく感じました。
懇親会
勉強会の後にはいつも懇親会が開催されています。今回の講師をされた鈴木氏、佐藤氏、笠原氏だけでなく、非常に多くのPostgreSQLのエキスパートの方々も出席されていました。そのような方々に勉強会の内容についての質問から、そもそもPostgreSQLってどう勉強していけばいいの?といった初歩的な質問にも答えて頂ける、まさに初心者にとって夢のような時間でした(笑)。
また、「最近はネットワーク女子(勉強)会なんてのがあるらしいから、PostgreSQLも女子会作っちゃおうよ!笑」なんてお茶目な話も飛び交っており、始終和やかな雰囲気でした。
最後に
今回この勉強会に参加して得られた一番の収穫は、バックアップやリカバリに使用するツールがそれぞれどの時点までのデータを復旧させることができるのか、その復旧に必要となる作業は何かということを勉強できたことです。PostgreSQLのデータ格納の仕組みから、「この場合のリカバリはこれが必要になる。だからバックアップにはこの作業が必要」ということを具体的に理解できました。
また講演資料はJPUGのホームページよりアップされており、今回分はこちらから見ることができます。後日読み返して復習することで、より確実に知識を定着させることができました。
敷居が高そうと思って敬遠しているPostgreSQL。データベース初心者の方も、ぜひ一度参加してみてはいかがでしょうか。
【関連リンク】
(リンク先最終アクセス:2014.06)