Restore a database backupEnterprise Edition
Neo4j suggests a few options to restore a database backup artifact (full or differential) created with the neo4j-admin database backup command.
Restore a database on a standalone server
To restore a database from a backup in a standalone server environment, use one of the following methods:
-
Use the
neo4j-admin database restorecommand. -
Restore a database using URI approach. See Create a database from a URI for detailed information.
-
Recreate a database using the
dbms.recreateDatabase()procedure. -
Introduced in 2026.03 Use the
neo4j-admin database copycommand to restore database data from a backup. See Copy database data from a backup for an example. -
You can also load a full database backup artifact using the
neo4j-admin database loadcommand. This functionality is available in the Community Edition.
Restore a clustered database from a backup
To restore a database from a backup in a clustered environment, use one of the following methods:
-
Recreate a database from a URI. See Restore a database in cluster using URI approach for more information.
-
Designate one of the servers to be used as a seeder, and restore the database backup on that server. For more information, see Restore a database using a server as a designated seeder.
-
Recreate a database using the
dbms.recreateDatabase()procedure. See Restore a database usingdbms.recreateDatabase()for more details. -
Introduced in 2026.03 Use the
neo4j-admin database copycommand. See Restore a clustered database using thecopycommand for more details.
Command
A database backup artifact (full or differential) can be restored within the same or to a later Neo4j version using the restore command of neo4j-admin.
|
Restoring a database backup to a previous Neo4j version is not supported. |
You must create the database (using CREATE DATABASE against the system database) after the restore operation finishes, unless you are replacing an existing database.
neo4j-admin database restore must be invoked as the neo4j user to ensure the appropriate file permissions.
For more information, see Create databases.
|
If you are using CDC, make sure you create the new database with the same |
|
When restoring a backup chain, the transaction log contained in the differential backup artifacts must first be replayed. This recovery operation is resource-intensive and can be decoupled from the restore operation by using the aggregate command. |
Syntax
neo4j-admin database restore [-h] [--expand-commands] [--verbose] [--overwrite-destination
[=true|false]] [--source-database[=source-database-name]]
[--additional-config=<file>] --from-path=<path> [,<path>...]
[--restore-until=<recovery-criteria>] [--temp-path=<path>]
[--to-path-data=<path>] [--to-path-txn=<path>] [<database>]
Parameters
| Parameter | Description |
|---|---|
|
Name of the database after restore. Usage of this parameter is only allowed if the |
Options
| Option | Description | Default | ||
|---|---|---|---|---|
|
Configuration file with additional configuration. |
|||
|
Allow command expansion in config value evaluation. |
|||
|
The path can point to an individual backup artifact, a folder that contains artifacts, or a comma-separated list of backup artifact files. An artifact file can be 1) a full backup, in which case it is restored directly or, 2) a differential backup, in which case the command tries first to find in the folder a backup chain ending at that specific differential backup and then restores that chain. It is possible to restore backups from AWS S3 buckets, Google Cloud storage buckets, and Azure buckets using the appropriate URI as the path. |
|||
|
Show this help message and exit. |
|||
|
If an existing database should be replaced.
|
|
||
|
Differential backup artifacts contain transaction logs that can be replayed and applied to stores contained in full backup artifacts when restoring a backup chain.
The database applies logs until the recovery predicate is satisfied.
Currently supported predicates are:
|
|||
|
Introduced in 2025.02 A source database name. If the |
|||
|
Base directory for databases.
Usage of this option is only allowed if the |
|||
|
Base directory for transaction logs.
Usage of this option is only allowed if the |
|||
|
Provide a path to a temporary empty directory for storing backup files until the command is completed. The files will be deleted once the command is finished. |
|||
|
Enable verbose output. |
|||
1. See Neo4j Admin and Neo4j CLI → Configuration for details.
| ||||
|
The |
|
The If If you don’t provide the Therefore, it is strongly recommended to provide a |
Examples
The following examples show how to inspect your backup directory and restore a database backup, created in the section Back up an online database. It is assumed that the backup artifacts (full and differential) are located in the /path/to/mybackups directory.
Inspect the backup artifacts
Use the following command to inspect the backup directory:
bin/neo4j-admin database backup --inspect-path=/path/to/mybackups
| FILE | DATABASE | DATABASE ID | TIME | FULL | COMPRESSED | LOWEST TX | HIGHEST TX |
| file:///path/to/mybackups/neo4j-2023-06-29T14-46-27.backup | neo4j | c8368b24-55e2-474d-bb41-75657f5bfcde | 2023-06-29T13:46:27 | true | true | 1 | 11 |
| file:///path/to/mybackups/neo4j-2023-06-29T14-50-45.backup | neo4j | c8368b24-55e2-474d-bb41-75657f5bfcde | 2023-06-29T13:50:45 | false | true | 12 | 14 |
| file:///path/to/mybackups/neo4j-2023-06-29T14-51-33.backup | neo4j | c8368b24-55e2-474d-bb41-75657f5bfcde | 2023-06-29T13:51:33 | false | true | 15 | 18 |
The example output shows that the backup artifacts are part of a backup chain.
The first artifact is a full backup, and the other two are differential backups.
The LOWEST TX and HIGHEST TX columns show the transaction IDs of the first and the last transaction in the backup artifacts.
That means, if you restore neo4j-2023-06-29T14-50-45.backup, your database will have 14 as the last transaction ID.
Restore a backup on a standalone server
The following examples assume that you want to restore your data in a new database, called mydatabase.
If you want to replace an existing database, you need to stop it first and add the option --overwrite-destination=true to the restore command.
-
Restore a database backup by running the following command:
bin/neo4j-admin database restore --from-path=/path/to/backups/neo4j-2023-06-29T14-51-33.backup mydatabaseThe
--from-path=argument must contain the path to the last backup of a chain, in this case,neo4j-2023-06-29T14-51-33.backup.If you want to restore several databases at once, you must stop them first and then you can alter the command by specifying a comma-separated list of paths to backup artifacts, and remove the
<database>parameter. You should also skip theCREATE DATABASEstep afterward if you are replacing an existing database. -
Create the new database using
CREATE DATABASEagainst thesystemdatabase.CREATE DATABASE mydatabase
Restore data up to a specific date
To restore data up to a specific date, you need to pass the backup artifact that contains the data up to that date.
This example assumes that you want to restore your data in a new database, called mydatabase.
If you want to replace an existing database, you need to stop it first, and add the option --overwrite-destination=true to the restore command.
-
Restore from the backup that contains the data up to the desired date.
bin/neo4j-admin database restore --from-path=/path/to/mybackups/neo4j-2023-06-29T14-50-45.backup --restore-until="2023-06-29 13:50:45" mydatabaseThe
--from-path=argument must contain the path to either a full or a differential backup artifact. The--restore-until=argument must contain a UTC date and time. The restore recovers all transactions that were committed before the provided date and time.If you want to restore several databases at once, you must stop them first and then you can alter the command by specifying a comma-separated list of paths to backup artifacts, and remove the
<database>parameter. You should also skip theCREATE DATABASEstep afterward if you are replacing an existing database.If you know the transaction ID of the last transaction that was committed before the date you want to restore to, you can use the
--restore-until=argument with the transaction ID instead of the date. For example,--restore-until=123. -
Create the new database using
CREATE DATABASEagainst thesystemdatabase:CREATE DATABASE mydatabase;
Restore a backup located in cloud storage
In Neo4j 2025.03, new cloud integration settings are introduced to provide better support for deployment and management in cloud ecosystems. For details, refer to Configuration settings → Cloud storage integration settings.
For details on how to restore a database backup located in cloud storage in a Neo4j Kubernetes deployment, see Restore a single database.
The following examples show how to restore a database located in cloud storage bucket using the --from-path option.
|
Neo4j uses the AWS SDK v2 to call the APIs on AWS using AWS URLs.
Alternatively, you can override the endpoints so that the AWS SDK can communicate with alternative storage systems, such as Ceph, Minio, or LocalStack, using the system variables |
-
Install the AWS CLI by following the instructions in the AWS official documentation — Install the AWS CLI version 2.
-
Create an S3 bucket and a directory to store the backup files using the AWS CLI:
aws s3 mb --region=us-east-1 s3://myBucket aws s3api put-object --bucket myBucket --key myDirectory/For more information on how to create a bucket and use the AWS CLI, see the AWS official documentation — Use Amazon S3 with the AWS CLI and Use high-level (s3) commands with the AWS CLI.
-
Verify that the
~/.aws/configfile is correct by running the following command:cat ~/.aws/configThe output should look like this:
[default] region=us-east-1
-
Configure the access to your AWS S3 bucket by setting the
aws_access_key_idandaws_secret_access_keyin the~/.aws/credentialsfile and, if needed, using a bucket policy. For example:-
Use
aws configure set aws_access_key_id aws_secret_access_keycommand to set your IAM credentials from AWS and verify that the~/.aws/credentialsis correct:cat ~/.aws/credentialsThe output should look like this:
[default] aws_access_key_id=this.is.secret aws_secret_access_key=this.is.super.secret
-
Additionally, you can use a resource-based policy to grant access permissions to your S3 bucket and the objects in it. Create a policy document with the following content and attach it to the bucket. Note that both resource entries are important to be able to download and upload files.
{ "Version": "2012-10-17", "Id": "Neo4jBackupAggregatePolicy", "Statement": [ { "Sid": "Neo4jBackupAggregateStatement", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::myBucket/*", "arn:aws:s3:::myBucket" ] } ] }
-
-
Run the
neo4j-admin database restorecommand to restore the database located in your AWS S3 storage. The example assumes that you have backup artifacts located in themyBucket/myDirectoryfolder in your bucket.bin/neo4j-admin database restore --from-path=s3://myBucket/myDirectory/myBackup.backup mydatabase -
If you have not stopped your database and used the
--overwrite-destination=trueoption, you have to create the newmydatabaseby running the command:CREATE DATABASE mydatabase;
-
Ensure you have a Google account and a project created in the Google Cloud Platform (GCP).
-
Install the
gcloudCLI by following the instructions in the Google official documentation — Install the gcloud CLI. -
Create a service account and a service account key using Google official documentation — Create service accounts and Creating and managing service account keys.
-
Download the JSON key file for the service account.
-
Set the
GOOGLE_APPLICATION_CREDENTIALSandGOOGLE_CLOUD_PROJECTenvironment variables to the path of the JSON key file and the project ID, respectively:export GOOGLE_APPLICATION_CREDENTIALS="/path/to/keyfile.json" export GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_ID -
Authenticate the
gcloudCLI with the e-mail address of the service account you have created, the path to the JSON key file, and the project ID:gcloud auth activate-service-account service-account@example.com --key-file=$GOOGLE_APPLICATION_CREDENTIALS --project=$GOOGLE_CLOUD_PROJECTFor more information, see the Google official documentation — gcloud auth activate-service-account.
-
Create a bucket in the Google Cloud Storage using Google official documentation — Create buckets.
-
Verify that the bucket is created by running the following command:
gcloud storage lsThe output should list the created bucket.
-
-
Run the
neo4j-admin database restorecommand to restore the database located in a given folder in your Google storage bucket. The example assumes that you have backup artifacts located in themyBucket/myDirectoryfolder in your bucket.bin/neo4j-admin database restore --from-path=gs://myBucket/myDirectory/myBackup.backup mydatabase -
If you have not stopped your database and used the
--overwrite-destination=trueoption, you have to create the newmydatabaseby running the command:CREATE DATABASE mydatabase;
-
Ensure you have an Azure account, an Azure storage account, and a blob container.
-
You can create a storage account using the Azure portal.
For more information, see the Azure official documentation on Create a storage account. -
Create a blob container in the Azure portal.
For more information, see the Azure official documentation on Quickstart: Upload, download, and list blobs with the Azure portal.
-
-
Install the Azure CLI by following the instructions in the Azure official documentation — Azure official documentation.
-
Authenticate the neo4j or neo4j-admin process against Azure using the default Azure credentials.
See the Azure official documentation on default Azure credentials for more information.az loginThen you should be ready to use Azure URLs in either neo4j or neo4j-admin.
-
To validate that you have access to the container with your login credentials, run the following commands:
# Upload a file: az storage blob upload --file someLocalFile --account-name accountName - --container someContainer --name remoteFileName --auth-mode login # Download the file az storage blob download --account-name accountName --container someContainer --name remoteFileName --file downloadedFile --auth-mode login # List container files az storage blob list --account-name someContainer --container someContainer --auth-mode login -
Run the
neo4j-admin database restorecommand to restore the database located in a given folder in your Azure blob storage container. The example assumes that you have backup artifacts located in themyStorageAccount/myContainer/myDirectoryfolder.bin/neo4j-admin database restore --from-path=azb://myStorageAccount/myContainer/myDirectory/myBackup.backup mydatabase -
If you have not stopped your database and used the
--overwrite-destination=trueoption, you have to create the newmydatabaseby running the command:CREATE DATABASE mydatabase;
Restore users and roles metadata
Users, roles, and auth rules metadata are backed up during the backup process by default.
If you need to restore the users and roles metadata, you have to do it manually by running the Cypher script from the <NEO4J_HOME> directory, /data/scripts/databasename/restore_metadata.cypher, which the neo4j-admin database restore command outputs, using Cypher Shell:
Using cat (UNIX)
cat ../data/scripts/databasename/restore_metadata.cypher | bin/cypher-shell -u user -p password -a ip_address:port -d system --param "database => 'databasename'"
Using type (Windows)
type ..\data\scripts\databasename\restore_metadata.cypher | bin\cypher-shell.bat -u user -p password -a ip_address:port -d system --param "database => 'databasename'"