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

PostgreSQLバックアップが適切かどうかはどうすればわかりますか?

    バックアップは、すべてのディザスタリカバリプランで必須です。許容可能な目標復旧時点を保証するのに必ずしも十分ではないかもしれませんが、最初のアプローチとしては適切です。問題は、障害が発生した場合にこのバックアップを使用する必要があり、何らかの理由で使用できない場合にどうなるかということです。おそらくそのような状況になりたくないので、このブログでは、バックアップが適切に使用できるかどうかを確認する方法を説明します。

    PostgreSQLバックアップの種類

    さまざまな種類のバックアップについて説明しましょう。さまざまなタイプがありますが、一般的には2つの単純なカテゴリに分類できます。

    • 論理的 :バックアップは、SQLなどの人間が読める形式で保存されます。
    • 物理的 :バックアップにはバイナリデータが含まれています。

    なぜこれに言及するのですか?あるタイプに対して実行できるチェックがいくつかあり、他のタイプに対しては実行できないことがわかるためです。

    バックアップログの確認

    すべてが正常に機能するかどうかを確認する最初の方法は、バックアップログを確認することです。

    PostgreSQLバックアップを実行するための最も簡単なコマンドは次のようになります。

    $ pg_dumpall > /path/to/dump.sql

    しかし、コマンドの実行中にエラーが発生したかどうかを確認するにはどうすればよいですか?追加するだけで、出力を特定のログファイルに送信できます:

    $ pg_dumpall > /path/to/dump.sql > /var/log/postgres/pg_dump.log

    したがって、サーバーcronにこの行を追加して、毎日実行することができます。

    30 0 * * * pg_dumpall > /path/to/dump.sql > /var/log/postgres/pg_dump.log

    そして、ログファイルを監視してエラーを探す必要があります。たとえば、Nagiosなどの監視ツールに追加します。

    ログを確認するだけでは、バックアップが機能することを確認できません。たとえば、何らかの理由でバックアップファイルが破損している場合、ログファイルにそのファイルが表示されない可能性があります。

    > バックアップコンテンツの確認

    論理バックアップを使用している場合は、バックアップファイルの内容を確認して、すべてのデータベースがそこにあることを確認できます。

    たとえば、次のコマンドを使用して、現在のPostgreSQLデータベースを一覧表示できます。

    $ psql -l | awk '{ print $1 }'| awk 'FNR > 3' |grep '^[a-zA-Z0-9]' |grep -v 'template0'
    
    postgres
    
    template1
    
    world

    バックアップファイルにあるデータベースを確認します:

    $ grep '^[\]connect' /path/to/dump.sql |awk '{print $2}'
    
    template1
    
    postgres
    
    world

    このチェックの問題は、サイズやデータをチェックしないことです。そのため、バックアップの実行時にエラーが発生した場合、データが失われる可能性があります。

    バックアップを手動で確認するための復元

    バックアップが機能しているかどうかを確認する最も安全な方法は、バックアップを復元してデータベースにアクセスすることです。

    バックアップが完了したら、ダンプファイルをコピーして実行することにより、別のホストに手動で復元できます。例:

    $ psql -f /path/to/dump.sql postgres

    次に、それにアクセスしてデータベースを確認できます:

    $ psql
    
    postgres=# \l
    
                                      List of databases
    
       Name    | Owner   | Encoding |   Collate | Ctype    | Access privileges
    
    -----------+----------+----------+-------------+-------------+-----------------------
    
     postgres  | postgres | UTF8     | en_US.utf-8 | en_US.utf-8 |
    
     template0 | postgres | UTF8     | en_US.utf-8 | en_US.utf-8 | =c/postgres          +
    
               |          | |             | | postgres=CTc/postgres
    
     template1 | postgres | UTF8     | en_US.utf-8 | en_US.utf-8 | =c/postgres          +
    
               |          | |             | | postgres=CTc/postgres
    
     world     | postgres | UTF8     | en_US.utf-8 | en_US.utf-8 |
    
    (4 rows)

    このメソッドの問題は、もちろん、手動で実行するか、これを自動化する方法を見つける必要があることです。これは、時間のかかる作業になる可能性があります。

    自動ClusterControlバックアップ検証

    ここで、ClusterControlがPostgreSQLバックアップの検証を自動化し、予期しない作業や手動タスクを回避する方法を見てみましょう。

    ClusterControlで、クラスターを選択し、[バックアップ]セクションに移動してから、[バックアップの作成]を選択します。

    自動検証バックアップ機能は、スケジュールされたバックアップで使用できます。それでは、「バックアップのスケジュール」オプションを選択しましょう。

    バックアップをスケジュールするときは、方法やストレージなどの一般的なオプションを選択するだけでなく、スケジュール/頻度も指定する必要があります。

    次のステップでは、バックアップを圧縮および暗号化して、保存期間。ここには、「バックアップの確認」機能もあります。

    この機能を使用するには、専用のホスト(またはVM)が必要です。クラスターの一部ではありません。

    ClusterControlはソフトウェアをインストールし、このホストのバックアップを復元します。復元後、ClusterControlバックアップセクションに確認アイコンが表示されます。

    結論

    前述のように、どの環境でもバックアップは必須ですが、バックアップを使用できない場合、バックアップはバックアップではありません。したがって、いつか必要になった場合に備えて、バックアップが役立つことを確認する必要があります。このブログでは、バックアップを復元するときに問題が発生しないように、バックアップを確認するさまざまな方法を紹介しました。


    1. MySQLでデータベースの文字セットと照合を設定する方法

    2. MySQL JDBCDriver5.1.33-タイムゾーンの問題

    3. T-SQL(sp_tables)を使用してSQLServerのテーブルとビューのリストを返す

    4. dbms_outputバッファを増やす方法は?