バックアップ手順
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/[バックアップファイル名]
としてバックアップファイルが出力されます。