PostgreSQLでは、バックアップとリカバリは他のデータベースと比較して非常にユーザーフレンドリーです。彼らの多くはこれに同意しません、わかりました、議論に入ることができません。バックアップに関しては、PostgreSQLは増分バックアップをサポートしていませんが、この目標を達成するための非常に一貫性のあるバックアップツールとOSレベルの回避策があります。
PostgreSQLのバックアップとリカバリに関する私の絵によるプレゼンテーションは、完全な概念的なアイデアを提供します。ダイアグラムを調べると、復元または回復に使用できるバックアップを確認できます。
論理バックアップ
論理バックアップに使用されるpg_dump、pg_restoreおよびpg_dumpallユーティリティ。 pg_dumpとpg_restoreは、データベースレベル、スキーマレベル、およびテーブルレベルのバックアップを取るのに役立ちます。クラスターレベルのダンプに使用されるPg_dumpall。
pg_dump、Plain SQL形式、Custom Format、TarFormatの3つの形式がサポートされています。カスタムおよびTar形式のダンプはpg_restoreユーティリティと互換性がありますが、プレーンSQL形式のダンプは復元用のpsqlユーティリティと互換性があります。
以下は、各バックアップレベルと関連する復元コマンドの例です。
注:.bash_profile(Windowsの環境変数)でPGDATABASE、PGUSER、PGPASSWORD、およびPGPORTのデフォルトを設定します
プレーンSQL形式のダンプと復元
$ pg_dump -U username -Fp dbname > filename
or
$ pg_dump -U username dbname -f filename
or
$ pg_dump -Fp -U username dbname -f filename
For restoring use psql command
$ psql -U username -f filename dbname
or
postgres=# i SQL-file-name //in psql terminal with i option
カスタムフォーマット
$ pg_dump -Fc dbname -f filename
$ pg_restore -Fc -U username -d dbname filename.dmp
tar形式
$ pg_dump -Ft dbname -f filename
$ pg_restore -U username -d dbname filename
or
$ cat tar-file.tar | psql -U username dbname
注:スキーマレベルとテーブルレベルのダンプは、関連するオプションを追加することで同じ方法で実行できます。
クラスターレベルのダンプ:
$pg_dumpall -p portnumber > filename
For restoring use psql command
$ psql -f filename
ダンプを取り、方法論を復元するための非常に最良の方法があります。特に、SimonRiggsとHannuKrosing –「PostgreSQL9 Administration Cookbook – 2010」の本は、www.2ndQuadrant.comによって公開されているPostgreSQL BackupandRecoveryから始めるのに適した方法です。
物理バックアップ(ファイルシステムバックアップ)
コールドバックアップ:
コールドバックアップでは、Postgresインスタンスがダウンしたときの/ dataディレクトリの単純なファイルシステムバックアップです。つまり、自己矛盾のないデータディレクトリバックアップを実現するには、コピーする前にデータベースサーバーをシャットダウンする必要があります。 PostgreSQLは、ソフトリンクを介してpg_xlogとpg_tblspceを異なるマウントポイントに保持する柔軟性を提供します。ソフトリンクのデータを含む/dataディレクトリをコピーするときに、次のコマンドを使用します。
tar czf backup.tar.gz $PGDATA
or
cp -r $PGDATA /backup/
or
rsync -a $PGDATA /wherever/data
ホットバックアップ(オンラインバックアップ):
ホットバックアップでは、クラスターが稼働し、データベースはアーカイブログモードになっている必要があります。 2つのシステム関数が、ホットバックアッププロセスの開始と停止についてインスタンスに通知します(pg_start_backup()、pg_stop_backup())。オンラインバックアップを進める前に、オンラインバックアップに必須のデータベースアーカイブログモードについて説明しましょう。
WALアーカイブの有効化:
私の今後の投稿では、PITR / Tunning WALなどについて簡単に説明します。現在、WALアーカイブについて調べています。 PostgreSQLデータベースシステムでは、実際のデータベースは、ディスクへの先行書き込みログ(WAL)と呼ばれる追加ファイルに「書き込み」ます。これには、データベースシステムで行われた書き込みの記録が含まれています。クラッシュの場合、データベースはこれらのレコードから修復/回復できます。
通常、ログ先行書き込みログは定期的に(チェックポイントと呼ばれます)データベースと照合され、不要になったため削除されます。データベースに対して行われたすべての書き込みの記録があるため、WALをバックアップとして使用することもできます。
WALアーカイブの概念:
先行書き込みログは、セグメントと呼ばれる16MBの各サイズで構成されます。 WALはpg_xlogディレクトリの下にあり、「データディレクトリ」のサブディレクトリです。ファイル名は、PostgreSQLインスタンスによって昇順で番号が付けられます。 WALに基づいてバックアップを実行するには、基本バックアップ、つまりデータディレクトリの完全バックアップと、ベースバックアップと現在の日付の間のWALセグメントが必要です。
WALセグメントのアーカイブの構成は、postgresql.confで2つの構成パラメーターのarchive_commandとarchive_modeを設定することで選択できます。クラスタをアーカイブログモードにするには、RESTARTが必要です。
archive_mode= on/off (boolean parameter)
archive_command = 'cp –i %p / Archive/Location/ f% '
注: %p ファイル名として使用されるパスと%fを使用してファイルをコピーする場合 宛先ファイルのディレクトリエントリなし。
アーカイバプロセスの詳細については、PostgreSQL 9.0 Memory&Processessの投稿を参照してください。
オンラインバックアップ:
オンラインバックアップを作成するには:
Step 1 : Issue pg_start_backup('lable') in the psql terminal
postgres=# select pg_start_backup('fb');
Step 2 : OS level copy the $PGDATA directory to any Backup Location
$ cp -r $PGDATA /anylocation
Step 3 : Issue pg_stop_backup() in psql terminal.
postgres=# select pg_stop_backup();
注: これらの2つの関数を同じデータベース接続で実行する必要はありません。バックアップモードはグローバルで永続的です。
PostgreSQLには、オンラインバックアップの開始時刻と停止時刻を保存するカタログがありません。ただし、オンラインバックアップの進行中は、いくつかのファイルが作成および削除されます。
pg_start_backup(‘label’)とpg_stop_backupは、オンラインバックアップを実行するための2つのシステム関数です。 pg_start_backup(‘label’)を使用すると、ファイルbackup_labelが$ PGDATAディレクトリの下に作成され、pg_stop_backup()を使用すると、ファイル‘wal-segement-number.backup’ファイルが$ PGDATA/pg_xlogの下に作成されます。 Backup_labelは、WALセグメントの開始時刻とチェックポイントの場所を示します。また、クラスターがBACKUP-MODEであることをPostgreSQLインスタンスに通知します。 $ PGDATA / pg_xlogディレクトリの下の「wal-segment-number.backup」ファイルには、開始時刻と停止時刻、チェックポイントの場所、およびWALセグメント番号が記述されています。
注:pg_stop_backup()の後、backup_labelファイルはPostgreSQLインスタンスによって削除されます。
コメントや提案を投稿してください。