pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

postgresバックアップ

自分の解釈

・論理と物理バックアップがあり。
・論理はpg_dumpとか
・物理はファイルシステムバックアップ
・物理バックアップの場合、バックアップ所要時間があり、整合性を確保する仕組みが必要。
・それを継続的アーカイブで実現するのがオンラインバックアップ
・継続的アーカイブは以下
 WALはテーブルスペースに反映されたら、適当なタイミングで削除される。
 削除されるタイミングで、アーカイブする。
 ※別ディレクトリにコピー。postgres機能でやってくれる。
 archive_command = 'cp %p /archive/%f'
 # WALアーカイブ処理時に使われるコマンド
 上記が継続的アーカイブの設定
・継続的アーカイブによるオンラインバックアップの流れ
 ※事前に継続的アーカイブ設定済みである必要あり。
 1.バックアップモード(PG_START_BACKUP)にする。
  ※バックアップモードにするとチェックポイント(未反映WALのテーブルスペースへの反映)が作成される。
 2.DB止めずにデータディレクトリをcpコマンドとかでバックアップ
 3.バックアップモードを解除

https://www.postgresql.jp/document/9.1/html/continuous-archiving.html
より引用

postgreSQLは常に、クラスタのデータディレクトリ以下のpg_xlog/ディレクトリ内で先行書き込みログ(WAL)を管理しています。 このログはデータベースのデータファイルに行われた全ての変更を記録します。 このログは主にクラッシュ時の安全性を目的としています。 システムがクラッシュしたとしても、最後のチェックポイント以降に作成されたログ項目を"やり直し"することで、データベースを整合性を維持した状態にリストアすることができます。

https://lets.postgresql.jp/documents/technical/backup/3
より引用

1. PG_START_BACKUP()の発行
本節の冒頭で述べたとおり、オンライン・バックアップで取得したベースバックアップには、取得中に発生したWALも必要になります。どこからどこまでのWALが必要になるのかを、PostgreSQLに教える関数を発行する必要があります。

これを行うのが、pg_start_backup() 及び pg_stop_backup() 関数です。それぞれ、ベースバックアップの取得前後に発行することになります。ベースバックアップの取得前に発行するpg_start_backup() 関数には、バックアップを示すラベルを指定します。ラベルはユーザの任意で自由に記述できます。典型的には、"いつ"バックアップが開始されたかを示す時間を打つと良いでしょう。