Windows版PostgreSQLのバックアップスケジューリング方法

はじめに

データベースのバックアップは、システムの安定性とデータの保全にとって非常に重要です。特に、ビジネスにおいて重要なデータを扱っている場合、データ損失は大きな損害を引き起こす可能性があります。この記事では、Windows環境でPostgreSQLのバックアップを自動的にスケジューリングする方法について詳しく説明します。

バックアップの種類

PostgreSQLのバックアップには主に以下の3種類があります。

NO分類概要
1オフライン物理DB を停⽌し、データファイルを物理的にコピーOS コマンド
2オンライン論理DB 起動状態で、データを取り出して保存。定義・データ単位
のバックアップも可能
3オンライン物理(増分)DB 起動状態で、データファイルを物理的にコピー。WALを継続的にアーカイブ。

この記事では、Windows環境でPostgreSQLのオンライン物理増分バックアップを行う方法について詳しく説明します。

オンライン物理増分バックアップの利点

オンライン物理増分バックアップには、以下のような利点があります。

  • 連続運用: バックアップ中でもデータベースを停止する必要がありません。
  • 効率的なストレージ使用: 変更されたデータのみをバックアップするため、ストレージの使用効率が高いです。
  • 迅速なリカバリ: 必要なデータのみをリストアするため、リカバリ時間が短縮されます。

オンライン物理増分バックアップの仕組み

オンライン物理増分バックアップは、PostgreSQLのWAL(Write-Ahead Logging)機能を活用しています。このセクションでは、その仕組みについて詳しく説明します。

WAL(Write-Ahead Logging)とは

WAL(Write-Ahead Logging)は、データベースのデータの一貫性を保つために非常に重要な仕組みです。日本語では「ログ先行書き込み」と訳され、その名の通り、データ本体に変更を加える前に、その変更内容をログに記録するという方式のことを指します。

WALの働き

トランザクションが正常に終了し、コミットされると、WALにコミットに関する情報が記録されます。

トランザクション開始:

データベースに何かしらの変更を加えるトランザクションが開始されると、その変更内容がWALに記録されます。

WALへの書き込み:

WALへの書き込みは、データ本体への変更よりも優先されます。つまり、WALにログが正常に書き込まれたことを確認してから、初めてデータ本体への変更が実行されます。

データ本体への書き込み:

WALへの書き込みが完了すると、データ本体への変更が実行されます。

コミット:

トランザクションが正常に終了し、コミットされると、WALにコミットに関する情報が記録されます。

オンライン物理増分バックアップの流れ

  1. アーカイブモードの有効化:
    • postgresql.confarchive_mode を有効にし、 archive_command を設定します。これにより、WALセグメントが定期的に指定の場所にアーカイブされます。
  2. ベースバックアップの取得:
    • 最初にフルバックアップ(ベースバックアップ)を取得します。このバックアップは、データベースの完全なスナップショットです。
    • pg_basebackup コマンドを使用してベースバックアップを作成します。
  3. 増分バックアップの取得:
    • ベースバックアップ以降に生成されたWALファイルを定期的にバックアップします。これが増分バックアップとなります。
    • 増分バックアップは、WALファイルのアーカイブを指定のディレクトリに保存することで実現します。

必要なツール

オンライン物理増分バックアップには以下のツールが必要です。

  • PostgreSQL(インストール済み)
  • pg_basebackup(PostgreSQLに含まれている)
  • Windowsタスクスケジューラ
  • バッチファイル(.bat)

バックアップの準備

まず、PostgreSQLのアーカイブモードを有効にし、適切に設定する必要があります。

postgresql.confの設定

postgresql.conf ファイル(C:\Program Files\PostgreSQL\15\dataにある)を編集し、以下の設定を変更します。(仮にWALファイルのアーカイブディレクトリはD:\Share\backup\archive\に設定します)

wal_level = replica
archive_mode = on
archive_command = 'copy "%p" "D:\\Share\\backup\\archive\\%f"'

pg_hba.confの設定

pg_hba.conf ファイルを編集し、リモート接続を許可するための設定を以下のように変更します。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
#変更前
#host    replication     all             ::1/128                scram-sha-256
host    replication     all             ::1/128                 trust

バッチファイルの作成

サンプルシナリオ

項目説明
バックアップ取得日時と種別初回全体バックアップ
月曜~土曜定時増分バックアップ
日曜定時全体バックアップ
世代管理過去2世代分を保持

全体バックアップスクリプト (full_backup.bat)

@echo off
    setlocal

    set PGUSER=postgres
    set PGBIN=C:\Program Files\PostgreSQL\15\bin
    set BACKUPDIR=D:\Share\backup\full

    set FILENAME=base_backup_%date:~-10,4%%date:~-5,2%%date:~-2,2%_%time:~0,2%%time:~3,2%%time:~6,2%
    "%PGBIN%\pg_basebackup" -U %PGUSER% -D "%BACKUPDIR%\%FILENAME%" -P

REM バックアップの世代管理
    for /f "skip=2 delims=" %%A in ('dir /b /o-d "%BACKUPDIR%\*"') do rd /s /q "%BACKUPDIR%\%%A"

増分バックアップスクリプト

WALアーカイブによって増分バックアップが自動的に行われます。特別なスクリプトは不要です。ただし、アーカイブ先のディレクトリを適切に管理する必要があります。

タスクスケジューラを使用して自動化

全体バックアップ(毎週日曜日、初回は手動で実行します)

  1. タスクスケジューラを開きます。
  2. 「タスクの作成」を選択します。
  3. 「全般」タブで、名前を「Full Backup」とします。
  4. 「トリガー」タブで、「新規」をクリックし、「毎週」を選択し、「日曜日」にチェックを入れます。
  5. 「操作」タブで、「新規」をクリックし、「プログラム/スクリプト」にfull_backup.batのパスを入力します。
  6. 「OK」をクリックしてタスクを作成します。

まとめ

この記事では、Windows環境でPostgreSQLのオンライン物理増分バックアップを行う方法について詳しく説明しました。オンライン物理増分バックアップを利用することで、システムの停止を最小限に抑えながら、効率的なバックアップと迅速なリカバリを実現できます。ぜひこの手順を参考に、バックアップ体制を整えてください。

コメント

タイトルとURLをコピーしました