NocoBase のバックアップと復元方法

新しいバージョンではどのようにアプリケーションのバックアップと復元を行うのでしょうか?本記事では、新しいバックアップ方法について詳しくご紹介いたします。

Chen lin |

背景

NocoBase v0.19 以降、アプリケーションのバックアップと復元のために @nocobase/plugin-backup-restore プラグインを導入しました。しかし、実際の使用では次のような問題があり、体験が理想的ではありませんでした:

  1. データベースのデフォルト値、ユニークインデックスなど、データベースレベルのメタデータをバックアップまたは復元できない。
  2. データベースのビュー、ストアドプロシージャ、関数、トリガーなどをバックアップまたは復元できない。
  3. 各プラグインフォームに dumpRules を個別に設定する必要があり、プラグイン開発者によるカスタムロジックが必要な場合もあります。そのため、バックアップと復元が失敗することがあります。
  4. バックアップグループの設計が複雑で理解しづらく、選択を誤るとバックアップの失敗やデータの喪失につながる可能性があります。
  5. バックアップと復元はアプリケーション層で行われるため、アプリケーションが起動できない場合、バックアップや復元も失敗します。

慎重に検討した結果、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以降、エンタープライズ版のユーザーは新しい「バックアップマネージャー」プラグインを直接利用でき、アプリケーションのバックアップと復元を簡単に実現できます。