背景
NocoBase v0.19 以降、アプリケーションのバックアップと復元のために @nocobase/plugin-backup-restore
プラグインを導入しました。しかし、実際の使用では次のような問題があり、体験が理想的ではありませんでした:
- データベースのデフォルト値、ユニークインデックスなど、データベースレベルのメタデータをバックアップまたは復元できない。
- データベースのビュー、ストアドプロシージャ、関数、トリガーなどをバックアップまたは復元できない。
- 各プラグインフォームに
dumpRules
を個別に設定する必要があり、プラグイン開発者によるカスタムロジックが必要な場合もあります。そのため、バックアップと復元が失敗することがあります。 - バックアップグループの設計が複雑で理解しづらく、選択を誤るとバックアップの失敗やデータの喪失につながる可能性があります。
- バックアップと復元はアプリケーション層で行われるため、アプリケーションが起動できない場合、バックアップや復元も失敗します。
慎重に検討した結果、v1.4 以降、このプラグインを廃止することを決定しました。それでは、新しいバージョンではどのようにアプリケーションのバックアップと復元を行うのでしょうか?本記事では、新しいバックアップ方法について詳しくご紹介いたします。
どのデータをバックアップすべきか?
NocoBase のバックアップと復元の過程では、主に以下のデータが含まれます:
- メインデータベースのデータ:対応するメインデータベースの種類には、PostgreSQL、MySQL、MariaDB、KingbaseES が含まれます。
- 外部データベースのデータ:対応する外部データベースの種類には、PostgreSQL、MySQL、MariaDB、MSSQL、Oracle、KingbaseES が含まれます。
- サブアプリケーションのデータベースのデータ:各サブアプリケーションは独立したデータベースであり、PostgreSQL を使用している場合は、スキーマで異なるサブアプリケーションを区別することもできます。
- storage ディレクトリのデータ:ディレクトリ全体をバックアップすることも、一部の重要なデータのみをバックアップすることも可能です。例えば:
- 添付ファイルデータ:
./storage/uploads
ディレクトリのファイル、ファイルマネージャーでローカルに保存されたファイル。 - プラグインコード:
./storage/plugins
ディレクトリ内のプラグイン、商用プラグインやサードパーティプラグインを含みます。
- 添付ファイルデータ:
バックアップと復元の流れ
1. データベースのバックアップ
各データベースのバックアップコマンドは以下の通りです:
PostgreSQL
pg_dump -U [ユーザー名] -h [ホスト名] -p [ポート] -F c -b --quote-all-identifiers -f [バックアップファイルのパス] [データベース名]
MySQL/MariaDB
mysqldump -u [ユーザー名] -p -h [ホスト名] -P [ポート] --databases [データベース名] --replace --single-transaction --column-statistics=0 --skip-lock-tables --routines --triggers > [バックアップファイルのパス].sql
2. バックアップをターゲットアプリケーションのデータベースに復元
各データベースの復元コマンドは以下の通りです:
PostgreSQL
pg_restore -U [ユーザー名] -h [ホスト名] -p [ポート] -d [データベース名] --clean --if-exists --no-owner [バックアップファイルのパス]
MySQL/MariaDB
mysql -u [ユーザー名] -p -h [ホスト名] -P [ポート] [データベース名] < [バックアップファイルのパス].sql
3. バックアップした storage をターゲットアプリケーションの storage に上書き
# 1. /app2/storage/ ディレクトリを /app2/storage-bak/ にバックアップ
mv /app2/storage /app2/storage-bak
# 2. /app1/storage/ の内容をすべて /app2/storage/ にコピー
cp -r /app1/storage/. /app2/storage/
4. アップグレードコマンドを実行し、アプリケーションを起動
# アプリケーションをアップグレード
yarn nocobase upgrade
# 本番環境でアプリケーションを起動
yarn start
# ローカル開発環境でアプリケーションを起動
yarn dev
備考:
- Docker 環境の場合は、コンテナを再起動するだけで済みます。
バックアップマネージャープラグイン
NocoBase v1.4以降、エンタープライズ版のユーザーは新しい「バックアップマネージャー」プラグインを直接利用でき、アプリケーションのバックアップと復元を簡単に実現できます。