💾

Neo4jデータベースのバックアップ方法

2025/03/09に公開

Neo4jのバックアップ、みなさんどうしてます?

最近のプロジェクトでNeo4jを使い始めたのですが、データベースのバックアップ方法について意外と詳しい日本語の情報が少なかったので、今回は私の運用方法を共有したいと思います。

バックアップの課題

Neo4jのバックアップって、意外と面倒くさいんですよね。特に以下のような課題がありました:

  • サービス停止が必要
  • 権限周りの設定が複雑
  • 手動だとミスの可能性大
  • 定期実行の仕組み作り

これらの課題を解決するため、シェルスクリプトで自動化する方法を考えてみました。

前提条件

以下の環境が整っていることを確認してください:

  • Neo4j 2025.02.0以上
  • Linux環境
  • root権限があること
  • バックアップ用の十分なディスク容量

バックアップの基本的な流れ

実は、Neo4jのバックアップって以下の5ステップで完結します:

  1. DBの状態確認 → データベースが正常に動作していることを確認
  2. サービス停止 → データの整合性を保つため
  3. データダンプ → 実際のバックアップ処理
  4. 権限設定 → バックアップファイルの所有権と権限を適切に設定
  5. サービス再起動 → バックアップ完了後のサービス復旧

実際のバックアップ手順

1. まずは状態確認から

データベースの状態を確認し、バックアップ可能な状態かどうかを確認します:

sudo -u neo4j cypher-shell

接続できたら、以下のコマンドを実行:

:use system
SHOW DATABASES;

2. バックアップディレクトリの準備

タイムスタンプ付きのバックアップディレクトリを作成し、適切な権限を設定します:

BACKUP_DIR="/path/to/backup/$(date +%Y%m%d_%H%M%S)_neo4j"
sudo mkdir -p $BACKUP_DIR
sudo chown neo4j:neo4j $BACKUP_DIR
sudo chmod 755 $BACKUP_DIR

3. サービスの停止とバックアップ

実際のバックアップ処理を実行します。この間はサービスが停止するため、ダウンタイムが発生します:

# サービスの停止
sudo systemctl stop neo4j

# バックアップの実行
sudo neo4j-admin database dump neo4j --to-path=$BACKUP_DIR

# 権限の設定
sudo chown neo4j:neo4j -R $BACKUP_DIR
sudo chmod 755 -R $BACKUP_DIR

# サービスの再起動
sudo systemctl start neo4j

リストア手順

⚠️ 重要: データディレクトリの権限設定について
リストア時の最も重要なポイントは、データディレクトリの権限設定です。これを正しく設定しないと、データベースを読み込めなくなる可能性があります。

# サービスの停止
sudo systemctl stop neo4j

# バックアップファイルの所有権設定
sudo chown neo4j:neo4j /path/to/backup/YYYYMMDD_HHMMSS_neo4j

# リストアの実行
sudo neo4j-admin database load neo4j --from-path=/path/to/backup/YYYYMMDD_HHMMSS_neo4j --overwrite-destination=true

# 【重要】データディレクトリの権限設定
sudo chown neo4j:neo4j -R /var/lib/neo4j/data
sudo chmod 755 -R /var/lib/neo4j/data

# サービスの再起動
sudo systemctl start neo4j

まとめ

Neo4jのバックアップ、最初は面倒に感じるかもしれませんが、一度自動化の仕組みを作ってしまえば、あとは安心して運用できます。

みなさんも、この記事を参考に自動バックアップの仕組みを作ってみてはいかがでしょうか?

何か質問や気になる点があれば、コメントで教えてください!

参考資料

Discussion