【入門編】 バックアップとリストアの基礎 – PostgreSQL

大切なデータ、どう守る? PostgreSQLのバックアップ&リストア超入門!

こんにちは!ブログにお越しいただきありがとうございます。
データベースの世界って、ちょっと難しそう…と感じていませんか? 特に「バックアップ」とか「リストア」って聞くと、「うわ、専門用語ばっかりでしょ?」なんて思っちゃうかもしれませんよね。

でも、大丈夫! 今日はそんなあなたのために、PostgreSQLというデータベースの「バックアップ」と「リストア」について、できるだけ分かりやすく、まるで日常の出来事に例えながらお話ししていきます。

「うちのデータ、ちゃんと守れてるかな?」って少しでも思ったことがあるなら、ぜひ最後まで読んでみてくださいね!

そもそも、バックアップって何のためにするの?

突然ですが、皆さんは普段、大切な写真や書類はどうしていますか?
スマホで撮った写真、パソコンに保存した大事なレポート。もし、スマホが壊れたり、パソコンが突然動かなくなったりしたら、それらのデータはどうなるでしょうか?

そう、失われてしまう可能性がありますよね。

だから、多くの人は「バックアップ」を取るんです。例えば、

  • 写真: クラウドストレージ(GoogleフォトとかiCloudとか)に同期したり、外付けHDDにコピーしたり。
  • 書類: USBメモリにコピーしたり、別のクラウドストレージに保存したり。

これは、万が一の事態に備えて、「もしもの時のための予備を用意しておく」という行動ですよね。

データベースも全く同じなんです。データベースに保存されているデータは、会社にとって、あるいはあなたにとって、かけがえのない大切な情報であることがほとんど。
もし、データベースが壊れてしまったり、誤ってデータを消してしまったり、あるいはサイバー攻撃を受けてしまったり…なんてことが起きたら、大問題です。

だからこそ、「もしもの時」のために、データベースの中身を丸ごとコピーしておきましょう! これが「バックアップ」の基本的な考え方です。

PostgreSQLの「バックアップ」って、具体的にどうやるの?

PostgreSQLには、この「バックアップ」を簡単に行ってくれる便利なツールが用意されています。それが、今回ご紹介する `pg_dump` というコマンドです。

`pg_dump` は、データベースの中身を「SQL文」という形でファイルに書き出してくれるんです。
SQL文っていうのは、データベースに「こういうデータを入れてね」「こういうデータを取り出してね」って指示を出すための言葉のこと。

例えるなら、`pg_dump` は、

「このデータベースの中にある、全ての『指示書(SQL文)』を、1枚の大きな紙に書き写して、ファイルにまとめてくれる」

ようなイメージです。

この「書き写された指示書」のファイルさえあれば、後で「あれ? 元のデータベースはどうなっていたっけ?」となった時に、この紙に書かれている指示書を順番に実行することで、元の状態をそっくりそのまま再現できる、というわけなんです。

`pg_dump` の基本的な使い方

実際のコマンドはこんな感じです。

pg_dump -U ユーザー名 -W -F t データベース名 > バックアップファイル名.tar

ちょっと難しそうに見えるかもしれませんが、一つずつ見ていきましょう。

  • `-U ユーザー名`: データベースに接続するためのユーザー名です。
  • `-W`: パスワードを入力するように求められます。
  • `-F t`: バックアップの形式を指定しています。「tar」という形式で保存しますよ、という意味です。
  • `データベース名`: バックアップしたいデータベースの名前です。
  • `> バックアップファイル名.tar`: バックアップされた内容を `バックアップファイル名.tar` という名前のファイルに保存します、という意味です。

例えば、`mydatabase` という名前のデータベースを、`myuser` というユーザーでバックアップしたい場合は、

pg_dump -U myuser -W -F t mydatabase > mydatabase_backup_$(date +%Y%m%d).tar

こんな感じになります。`$(date +%Y%m%d)` の部分は、実行した日付(例: 20231027)をファイル名に自動で付けてくれるので、いつのバックアップか分かりやすくて便利ですよ。

このコマンドを実行すると、カレントディレクトリ(コマンドを実行した場所)に、`mydatabase_backup_20231027.tar` のようなファイルが作成されているはずです。これが、あなたのデータベースの「設計図」であり「履歴書」のようなものです!

バックアップしたデータ、どうやって元に戻すの?(リストア)

さて、無事にバックアップが取れました! でも、もし本当にデータベースが壊れてしまったら、このバックアップファイルをどうやって使うのでしょうか?

ここで登場するのが、`pg_restore` というコマンドです。

`pg_restore` は、先ほど `pg_dump` で作成したバックアップファイル(`.tar` ファイル)を読み込んで、データベースを元の状態に「復元」してくれるんです。

例えるなら、`pg_restore` は、

「`pg_dump` が書き写してくれた『指示書』の紙を、もう一度データベースに渡して、『この通りに元に戻して!』とお願いしてくれる」

という役割をしてくれます。

`pg_restore` の基本的な使い方

こちらも基本的なコマンドを見てみましょう。

pg_restore -U ユーザー名 -W -d データベース名 バックアップファイル名.tar

  • `-U ユーザー名`: 復元先のデータベースに接続するためのユーザー名です。
  • `-W`: パスワードを入力するように求められます。
  • `-d データベース名`: 復元先のデータベースの名前です。このデータベースは、事前に作成しておく必要があります。
  • `バックアップファイル名.tar`: 復元したいバックアップファイルの名前です。

例えば、先ほど作成した `mydatabase_backup_20231027.tar` というファイルを使って、`mydatabase_restored` という名前の新しいデータベースに復元したい場合は、

まず、復元先のデータベースを作成します。

createdb -U ユーザー名 mydatabase_restored

そして、`pg_restore` コマンドを実行します。

pg_restore -U myuser -W -d mydatabase_restored mydatabase_backup_20231027.tar

これで、バックアップを取った時点の `mydatabase` の内容が、`mydatabase_restored` というデータベースにそっくりそのまま再現されるはずです!

なぜバックアップがそんなに大切なの?

ここまでで、バックアップとリストアの基本的なやり方は分かったかと思います。でも、改めて「なぜそこまでしてバックアップが必要なの?」と思うかもしれません。

それは、「データは失われる可能性がある」という、データベースに限らず、どんなデータにも共通する事実があるからです。

  • ハードウェアの故障: サーバのディスクが突然壊れることは、残念ながらあり得ます。
  • 人的ミス: 「うっかり」で大事なデータを消してしまったり、間違った情報を書き込んでしまったり。誰にでも起こりうることです。
  • サイバー攻撃: ランサムウェアなどでデータが暗号化されてしまい、復旧できなくなるケースもあります。
  • 自然災害: 地震や火災などで、データセンターが被災してしまう可能性もゼロではありません。

これらのリスクは、どれも他人事ではありません。
もし、これらの事態が起きた時に、バックアップがなければ、失われたデータは二度と戻ってきません。それは、ビジネスの継続に致命的な影響を与えたり、個人にとってかけがえのない思い出を失ったりすることにつながりかねません。

だからこそ、「定期的なバックアップ」は、データベース運用における「保険」であり、「必須の習慣」なんです。
「まだ大丈夫だろう」と思っているうちに、万が一の事態が起こってしまわないように、しっかり準備しておきましょう。

まとめ:バックアップは「もしも」のための準備

今日は、PostgreSQLのバックアップとリストアの基本について、`pg_dump` と `pg_restore` というコマンドを中心に見てきました。

  • バックアップ: 大切なデータベースの中身を、万が一のためにコピーしておくこと。
  • リストア: バックアップしたデータを使って、データベースを元の状態に戻すこと。
  • `pg_dump`: データベースの中身をSQL文のファイルとして書き出すコマンド。
  • `pg_restore`: SQL文のファイルからデータベースを復元するコマンド。
  • 重要性: ハードウェア故障、人的ミス、サイバー攻撃など、様々なリスクからデータを守るために不可欠。

最初は少し難しく感じるかもしれませんが、一度手順を覚えてしまえば、そんなに怖いものではありません。
まずは、ご自身の開発環境などで、実際に `pg_dump` と `pg_restore` を試してみてください。実際に手を動かしてみるのが、一番の近道ですよ!

この記事が、あなたのデータベース運用の一助となれば嬉しいです。
最後までお読みいただき、ありがとうございました!

コメント

タイトルとURLをコピーしました