6.バックアップとリストア【OSS DB exam Silver】

OSSsilver

現在OSS-DB Silver Ver.2を勉強中のサイト主です。

OSS DB Silverを本で勉強していても図にしないとわからなかったり、表にしたほうが分かりやすいこともあります。そのため、自分が覚えにくいと思ったこと、混同しやすいことをまとめています。書いてあることは常識なことかもしれませんが私がわからなかったことをまとめています。

勉強法などは下記に記載しています。

OSS DB Silverを取得するためにやったこと

OSS DB exam Silverの勉強内容

  1. オープンソースデータベースの一般的特徴
  2. データベースの基礎知識
  3. インストール
  4. 標準付属ツール
  5. 設定ファイル
  6. バックアップとリストア⇦今日はこれ!
  7. 基本的な運用管理
  8. SQLとオブジェクト
  9. 組み込み関数と演算子
  10. トランザクション

バックアップとリストア

【Part6】OSS DB Exam Silver 技術解説セミナー ~ PostgreSQL バックアップ・リストア PITR ①~

【Part7】OSS DB Exam Silver 技術解説セミナー ~ PostgreSQL バックアップ・リストア PITR ② ~

バックアップ

コンピュータシステムでデータシステムの状態を複製

リストア

データ損失が起きた際に複製しておいたデータから戻すこと

やり方①

バックアップ形式 バックアップコマンド リストアコマンド
平文形式 pg_dumpコマンドまたはpg_dumpallコマンド psqlコマンド
平文形式以外 pg_dumpコマンド pg_restoreコマンド

バックアップコマンド

  • pg_dump [接続オプション][-Fp | -Fc | -Ft][-f ファイル名][データベース名]
  • pg_dumpall [接続オプション][-f ファイル名]
オプション 説明
-Fp 出力形式(Format)として平文(plain)を指定する。-Fの指定がない場合のデフォルト
-Fc 出力形式(Format)としてカスタム形式(custom)を指定する。
-Ft 出力形式(Format)としてtar形式(tar)を指定する。
-f バックアップ先のファイル名を指定する。省略した場合は標準出力となる。

リストアコマンド

  • psql [接続オプション][-f ファイル名]
  • pg_restore[接続オプション][オプション][-d データベース名][ファイル名]
オプション 説明
-d リストア先のデータベース名を指定する

バックアップ&リストア例

  • 平文でのバックアップ&リストア
  • カスタム形式でのバックアップ&リストア

 ※ポイント:どれもPostgreSQL稼働中に実行

やり方②ディレクトリコピーによるバックアップ&リストア

サーバを停止した状態でデータベースクラスタをコピーによって取得したバックアップはサーバが動作しないことを認識してリストアします。

物理バックアップと論理バックアップ

物理バックアップ

データベース上のテーブル構造やデータとは無関係に取得するバックアップ

論理バックアップ

テーブル構造やデータを意識したバックアップ

オンラインバックアップとオフラインバックアップ

データベースの稼働中に実行するバックアップをオンラインバックアップ

データベースを停止させてバックアップをとることをオフラインバックアップ(コールドバックアップ)

やり方③PITR(Point In Time Recovery)

データベース全体のバックアップに加えて、PostgreSQLの運用中にアーカイブとして記録された更新データを元にデータベースをリカバリする機能。

ある時点でデータベース全体のバックアップを取得します。これをベースバックアップ。PostgreSQLにはデータベースに対して行われたすべての変更を記録する機構が備わっており、内容はログに出力される。

先行書き込みログ=WAL(Write Ahead Logging)を別の場所へ保存するようにする→WALアーカイブ

ロールフォワードリカバリ⇔ロールバック 後ろ向きにバックアップすること

項目 主な手順
前準備/設定 WALアーカイブ、postgresql.confの設定
べースバックアップ pg_start_backup()関数/pg_stop_backup()関数によるバックアップ
リカバリ ①ベースバックアップのリストア
②未アーカイブのWALファイルをコピー
③recovery.confの設定、PostgreSQLの起動

a.PITRによるバックアップの前準備/設定

パラメータ 説明
wal_level WALに書き込まれる情報の度合いを指定する。デフォルト値はreplica。minimal、replica、logicalを指定できる。PITR使用時はreplicaまたはlogicalを指定する。
archive_mode WALアーカイブを有効にするかどうかの指定。デフォルトはOFF。PITR使用時はonに設定する
archive_command WALファイルをWALアーカイブとしてコピーするためのシェアコマンドを指定する。

b.べースバックアップ

pg_start_backup(‘ラベル名’)→pg_stop_backup()

c.リカバリ

  1. ベースバックアップのリストア
  2. 未アーカイブのWALファイルをコピー
  3. recovery.confの設定、PostgreSQLの起動

COPY文と\copyコマンド

  • COPY文:サーバ側のファイルにアクセスしてデータベースのデータのやり取りをする
  • \copyコマンド:クライアント側のファイルにアクセスして、ネットワークを介してデータベースのやり取りをする

COPY文

  • COPY テーブル名 TO {‘絶対パスのファイル名’| STDOUT}[[WITH](オプション[,…])]
  • COPY テーブル名 FROM {‘絶対パスのファイル名’| STDIN}[[WITH](オプション[,…])]
オプション 説明
DELIMITER’区切り文字’ 各行の列を区切る文字を指定する。デフォルトはタブ文字。
FORMAT csv CSV形式で入出力する場合に指定する。
HEADER ヘッダ行の指定。出力では各列の名前が出力され、入力では先頭行が無視される。CSV経緯生を指定した場合に有効

\copyコマンド

  • \copy テーブル名 to {ファイル名|stdout} [with] [delimiter [as] ‘区切り文字’[csv [header]]]
  • \copy テーブル名 from {ファイル名|stdint} [with] [delimiter [as] ‘区切り文字’[csv [header]]]

ディレクトリ単位バックアップは物理的に行われるバックアップ

tarコマンドはベースバックアップ、データベースクラスタ使える

所感

一番理解することが難しかった。物理バックアップと論理バックアップでも違いがあったり、バックアップを終えた後のリストアでも違いがある。その詳細部分まで細かく見るのが必要になる。図解してみたので追加で掲載する予定です。