Backup Neo4j - Community Edition (Plain Linux and Docker)
Backing up data is crucial - also for NoSQL databases such as Neo4j graph db. Here are some hints on how to properly proceed for taking consistent backups for both Community and Enterprise Edition.
Enterprise Edition
Only Neo4j's Enterprise Edition provides a dedicated tool neo4j-backup
for consistent and (consistency checked) backups while Neo4j is running.
Please refer to Neo4j's online documentation for detailed instructions:
Neo4j Operations Manual: https://neo4j.com/docs/operations-manual/current/backup/
Community Edition
In community edition however it takes the following steps for creating a backup:
- Shutdown Neo4j.
- Copy (via
tar
orrsync
)graph.db
folder - Restart Neo4j
For restoring this backup:
- Shutdown Neo4j
- Remove the existing
graph.db
folder - Copy (via
tar
orrsync
) the backupgraph.db
folder to new location - Restart Neo4j
Note: If using rsync
ownership will be mapped to the user running rsync
.
Plain Linux
The following steps are based on Stefan Armbruster's recommendation on stack overflow and have been adapted to Neo4j's current folder structure:
Stack Overflow: http://stackoverflow.com/questions/25567744/backup-neo4j-community-edition-offline-in-unix-mac-or-linux
Creating the backup:
After shutting down Neo4j just do:
cd data/databases
tar -zcf graph.db.tar.gz graph.db/
After these tasks have completed restart Neo4j.
Restoring the backup:
After shutting down Neo4j just do:
cd data/databases
rm -rf graph.db
tar -zxf graph.db.tar.gz
After these tasks have completed restart Neo4j.
Note: This will only backup and restore payload data (and not e.g. user and authentication data which currently resides in the data/dbms
folder).
Docker Container
The following steps are based on Docker's tutorial on Docker Volumes and have been adapted to Neo4j's official Docker image (with its /data
volume) and to host binds
(-v
instead of a data volume container
).
Docker Docs: https://docs.docker.com/engine/tutorials/dockervolumes/#/backup-restore-or-migrate-data-volumes
Creating the backup:
After stopping the Neo4j container just do:
docker run --rm --volumes-from <neo4j_container_name> -v $(pwd):/backup debian:jessie tar cvf /backup/backup.tar /data
After this task has completed restart the Neo4j container.
Restoring the backup:
After stopping the Neo4j container just do:
docker run --rm -v $(pwd):/backup -v <new_neo4j_host_bind>:/data debian:jessie bash -c "cd /data && tar xvf /backup/backup.tar --strip 1"
You can check if the data has successfully been copied to the new host bind
by:
docker run --rm -v <new_neo4j_host_bind>:/data debian:jessie bash -c "ls /data"
After this task has completed and checking the data restart the Neo4j container.
Note: This will also backup and restore all data (e.g. also user and authentication data) and not only payload data.