1.論理バックアップ
2.物理バックアップ ←今回
2.物理バックアップ
PostgreSQLのデータベースの実体はファイルの集まりです。このファイル自体をコピーするのが物理バックアップです。
PostgreSQLを起動した状態で行うのがオンライン・バックアップ、PostgreSQLを停止させた状態で行うのがオフライン・バックアップです。
1)特徴
・バックアップサイズが大きい
・バックアップ時間が長い
・リカバリ時間は短い
・業務影響大(方法によっては小)
物理バックアップは、DBを停止する必要がある(オンラインバックアップ)ため、業務に対する影響は大きいです。また、バックアップサイズが大き目で、ストレージを圧迫する影響は大です。基本的にはファイルのバックアップなので、リストアにはあまり時間がかかりません。
2)バックアップ方法
①オフラインバックアップ
PostgreSQLは停止しているので、データベースの実体であるファイルが更新されることはありません。そのため、バックアップするのはコピーコマンドを使ってPostgreSQLのデータが格納されたディレクトリごとコピーするだけです。高価なストレージを使っているなら、スナップショット機能を利用することも可能です。
バックアップしたデータをリストアするには、コピーしたデータを使ってPostgreSQLを起動します。
②オンラインバックアップ
PostgreSQLが起動しているので、データベースのファイルへの更新が行われています。そのため、単純にファイルをコピーするだけではだめです。コピー中にファイルが更新された分もカバーする必要があります。
PostgreSQLの場合、トランザクションログであるWALを使ってカバーします。
即ち、バックアップを使ってリカバリするには、
①バックアップしたデータを用意する
②バックアップ中に発生したWALも用意する
③バックアップしたデータを元にPostgreSQLを起動し、バックアップ中に発生した更新処理をWALから読みだし、未反映な処理をデータに反映する
といった手順となります。
③の部分はPostgreSQLが自動でやってくれるので、①と②のデータをバックアップとして取得しておけば良いです。
①のデータは、オフライン・バックアップの時と同じくコピーコマンドを使ってバックアップします。②のデータはWALアーカイブという形で取得しておきます。
WALファイルはデフォルト設定では直近の一定数しか保存されず、古くなったものは削除もしくは再利用(上書き)されていきます。そのため、リカバリに使えるようにWALファイルを別の場所に保存しておく必要があります。
「postgresql.conf」に設定をしてPostgreSQLを起動すれば、別の場所に保存してくれます。
wal_level = archive # リカバリに使える情報を保存するようにminimal以外の値にしておく
archive_mode = on # PostgreSQLによるWALアーカイブ処理を有効にする archive_command = 'cp %p /archive/%f' # WALアーカイブ処理時に使われるコマンドを指定する
ちなみに、「postgresql.conf」の保存場所は、「PostgreSQL」をインストールしたフォルダの「data」フォルダにあります。
3)オンラインバックアップ時の手順
リカバリ時に本当に必要なWALを特定するために、「pg_start_buckup()」と「pg_stop_buckup()」コマンドを使います。
オンライン・バックアップを行う際に
①pg_start_buckup()を実行
②データベースのファイルをコピー(オフライン・バックアップと同様)
③pg_stop_buckup()を実行
「pg_start_backup()」コマンドと「pg_stop_backup()」コマンドを実行することで、バックアップが始まった時点と終わった時点のWALファイルがどれなのかがPostgreSQLによって記録されます。この情報はWALファイルと同じ場所に保存されるので、WALアーカイブを行っていれば同じくバックアップすることができます。
PostgreSQL 9.1からは、上記の3ステップをすべてひっくるめて行ってくれる「pg_basebackup」コマンドが用意されました。「
-D」
オプションでバックアップ保存先を指定して実行します。
「pg_basebackup -D/バックアップ場所」
以上がPostgreSQLのバックアップでした。
以上がPostgreSQLのバックアップでした。
0 件のコメント:
コメントを投稿