バックアップ手順
1. 目的
FRUCtoS配布パッケージにより構成されるFRUCtoSのDBのバックアップ方法について説明します。
本ドキュメントはソフトウェアのインストール、OSの環境設定など基本的なコンピュータ管理の知識とその操作権限をもつ方を対象としています。
また、本書ではDockerを用いた手順とPostgreSQLを用いた 手順を解説しているため、DockerとPostgreSQLの基本的な知識があるとより望ましいです。
例としてDockerを実行環境とする場合を記載しています。 他のDocker互換のコンテナ実行環境をお使いの方は、適宜読み替えてください。 設定ファイルも適宜書き換えてください。
2. DBバックアップの全体像
FRUCtoSで用いているDBは現在以下の3種類があり、それぞれ必要に応じてバックアップを取ることが推奨されます。
fructos_docker_database(FRUCtoS用のDB)fructos_docker_audit_database(FRUCtoSの監査ログ用のDB)fructos_docker_configuration_database(FRUCtoSの設定永続化用のDB)
DBのバックアップ方法はいくつかありますが、ここではFRUCtoSの標準で用いているDB管理システム、PostgreSQLの機能を用いた方法について、 2種類のバックアップの概要と手順を示します。PostgreSQLと異なるDB管理システムを用いている場合は、そのシステムに応じたバックアップ方法を検討ください。
2.1. 論理バックアップ
論理バックアップはある時点でのDBのデータをバックアップファイルにバックアップします。作成されたバックアップファイルは、バックアップを行った時点にのみリストアが可能です。
論理バックアップの概念図

2.2. 物理バックアップ
物理バックアップはある時点でのDBのデータをベースバックアップファイルにバックアップし、また、データベースの変更ログを実際の処理に先行して継続的にWALファイルに書き出します。
ベースバックアップファイル作成時点以降かつWALファイルが存在する範囲内の任意の時点にリストアが可能です。
物理バックアップの利点は継続的にWALファイルが書き出されることです。DBがクラッシュした場合でも、先に書き出されたWALファイルとベースバックアップファイルを用いてリストアできます。
半面で、WALファイルが書 き出し続けられるために、バックアップのファイル容量が増えていきます。
ファイル容量を抑えるために、定期的にベースバックアップファイルを作り直し、そのベースバックアップファイル作成以前のWALファイルを削除することが推奨されます。
物理バックアップの概念図

2.3. バックアップの違いの概要
論理バックアップと物理バックアップの違いについて、その概要を以下表に示します。
| 論理バックアップ | 物理バックアップ | |
|---|---|---|
| バックアップファイル | 1つ(バックアップファイル) | 2つ以上(ベースバックアップファイル、 ベースバックアップ以降のWALファイル) |
| リストア先 | バックアップ時点のみ | ベースバックアップ以降のWALファイル存在範囲内で任意 |
| 起動中のバックアップ | 可能 | 部分的に可能(WALファイル出力設定変更の反映には停止が必要) |
| DBシステムクラッシュ時 | クラッシュ時の動 作はなし(バックアップ時点への復元は可能) | クラッシュ時の操作まで復元が可能 |
3. DB論理バックアップ手順
構築手順 4.3 FRUCtoSの配置における配布パッケージ展開先のフォルダを$WORKと表記します。
以下の例では配布パッケージを展開した$WORK/dist/fructos_dockerで作業します。
コマンド内における[]で囲まれる以下に示す名前は、それぞれ適切なものに置き換えてください。
- [DBサービス名]
バックアップを行うDBのサービス名です。通常では以下のいずれかで置き換えます。db(FRUCtoS用のDBのサービス名)audit-db(FRUCtoSの監査ログ用のDBのサービス名)configuration-db(FRUCtoSの設定永続化用のDBのサービス名)
- [バックアップファイル名]
バックアップファイルのファイル名で置き換えます。
3.1. バックアップ手順
$WORK/dist/fructos_dockerフォルダ内で次のコマンドを実行してください。コマンドはWindows、Linux、macOSで共通です。
docker-composeのバージョンがv2.0.0以上の場合、以降のドキュメントサイトに記載されているdocker-composeコマンドをdocker composeコマンドに読み替えて実行してください。
docker-compose exec [DBサービス名] /bin/bash -c 'pg_dumpall -c -U $POSTGRES_USER > /bak/postgresql/bak/[バックアップファイル名]'
コマンドが実行されると、$WORK/dist/fructos_docker/[DBサービス名]/bak/[バックアップファイル名]としてバックアップファイルが出力されます。
3.2. リストア手順
バックアップで作成したファイルを、$WORK/dist/fructos_docker/[DBサービス名]/bak/[バックアップファイル名]として配置します。
$WORK/dist/fructos_dockerフォルダ内で次のコマンドを実行してください。コマンドはWindows、Linux、macOSで共通です。
docker-compose exec [DBサービス名] /bin/bash -c 'psql -f /bak/postgresql/bak/[バックアップファイル名] -U $POSTGRES_USER'
コマンドが実行 されると、バックアップファイル内のSQLコマンドが順に実行され、バックアップ時点のDBにデータが復元されます。実行前のデータは失われることに注意してください。
4. DB物理バックアップ手順
PostgreSQLのDB物理バックアップには、バックアップのベースとなるベースバックアップと、ベースバックアップ以降のDB書き込みログであるWALが必要です。
ベースバックアップは「DB論理バックアップ手順」同様にコマンドを実行する必要があります。対して、WALはDBの出力設定が有効となっている場合は、DB書き込み時に自動的に生成されます。
ベースバックアップの取得はDBシステム起動中にも行うことも出来ますが、DBのWAL出力設定の変更と反映にはDBシステムの停止が必要です。
4.1. WALファイル出力設定手順
$WORK/dist/fructos_dockerフォルダ内で次の手順を行ってください。手順はWindows、Linux、macOSで共通です。
- Dockerコンテナを停止します。
Shell
docker-compose stop - PostgreSQLのDB設定ファイルを編集します。
$WORK/dist/fructos_docker/[DBサービス名]/postgresql.confをテキストエディタなどから開き、archive_mode = ONに変更し、上書き保存します。 - 停止したDockerコンテナを再起動します。
Shell
docker-compose start $WORK/dist/fructos_docker/[DBサービス名]/wal/以下にWALファイルが出力されます。
DBのWAL出力設定を無効とする場合は、同様の手順でarchive_mode = OFFに変更してください。
4.2. ベースバックアップ手順
$WORK/dist/fructos_dockerフォルダ内で次のコマンドを実行してください。コマンドはWindows、Linux、macOSで共通です。
docker-compose exec [DBサービス名] /bin/bash -c 'pg_basebackup -U $POSTGRES_USER -D - -Ft -Xn -z > /bak/postgresql/bak/[バックアップファイル名]'
コマンドが実行されると、$WORK/dist/fructos_docker/[DBサービス名]/bak/[バックアップファイル名]としてベースバックアップファイルが出力されます。
WALはDB書き込みの度に書き出されるため、運用時にファイル容量が大きくなりやすいです。定期的にベースバックアップを取得し、
ベースバックアップ以前の古いWALファイルを適宜削除することが推奨されます。
4.3. リストア手順
WALファイルを、$WORK/dist/fructos_docker/[DBサービス名]/wal/以下に、ベースバックアップファイルを、
$WORK/dist/fructos_docker/[DBサービス名]/bak/[バックアップファイル名]の形式でそれぞれ配置します。
ファイルの配置後、$WORK/dist/fructos_dockerフォルダ内で次の手順を行ってください。手順はWindows、Linux、macOSで共通です。
-
Dockerコンテナを停止しま す。
Shelldocker-compose stop -
リストアの設定をします。
Shelldocker-compose start [DBサービス名]Shelldocker-compose exec [DBサービス名] /bin/bashShellrm -rf /var/lib/postgresql/data/*Shelltar xvzf /bak/postgresql/bak/[バックアップファイル名] -C /var/lib/postgresql/data/Shelltouch /var/lib/postgresql/data/recovery.signalShellexit -
リストアの詳細設定をする場合は、PostgreSQLのDB設定ファイルを編集します。
$WORK/dist/fructos_docker/[DBサービス名]/postgresql.confをテキストエディタなどから開き、編集後、上書き保存します。 デフォルトではWALファイル内の最新状態を対象にリストアが行われますが、最新以外の状態への変更などが可能です。詳しくは以下のリンク先ドキュメントを参照してください。
https://www.postgresql.jp/document/13/html/runtime-config-wal.html#RUNTIME-CONFIG-WAL-RECOVERY-TARGET -
Dockerコンテナを再起動します。
Shelldocker-compose restart -
DBにデータが復元されます。実行前のデータは失われることに注意してください。
DBサービスのログからリカバリの状態を確認できます。
docker-compose logs -f [DBサービス名]
5. バックアップ先フォルダの変更
ストレージ故障時の復旧のために別ストレージへバックアップファイルを保存する場合など、バックアップ先のフォルダの変更方法について説明します。
$WORK/dist/fructos_dockerフォルダ内で次の手順を行ってください。手順はWindows、Linux、macOSで共通です。
- Dockerコンテナを停止します。
Shell
docker-compose stop docker-compose.ymlを編集します。
$WORK/dist/fructos_docker/docker-compose.ymlをテキストエディタなどから開き、編集後、上書き保存します。 ファイル内のservices: [DBサービス名]: volumes:以下の設定値左部について、バックアップファイルの保存先を変更する場合は、./[DBサービス名]/bakを、WALファイルの保存先を変更する場合は、./[DBサービス名]/walをそれぞれ新たな保存先のパスへ置き換えてください。services:
[DBサービス名]:
volumes:
- ./[DBサービス名]/bak:/bak/postgresql/bak ・・・(バックアップファイルの保存先)
- ./[DBサービス名]/wal:/bak/postgresql/wal ・・・(WALファイルの保存先)- docker-compose.ymlの変更を反映して起動します。
Shell
docker-compose up -d