sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL9.0のバックアップとリカバリ

    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インスタンスによって削除されます。

    コメントや提案を投稿してください。


    1. postgresで値のタイプを確認する方法

    2. T-SQLを使用してSQLServerの列を削除する方法

    3. 自動化を使用してPostgreSQLのリリーステストを高速化

    4. mysqlで選択された値のコンマ区切りの文字列