You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The number of both primary and secondary servers to host a database can be set when the database is created and altered after creation.
8
-
The command `CREATE DATABASE` can be used to specify the initial topology and `ALTER DATABASE` can be used to change the topology once the database is created.
7
+
When creating a database or altering it after creation, you can set the number of both primary and secondary servers to host your database.
8
+
To specify the initial topology, use the command `CREATE DATABASE`.
9
+
To change the topology once the database is created, run the `ALTER DATABASE` command.
9
10
If a database is no longer needed, the command `DROP DATABASE` deletes the database from the cluster.
10
11
11
12
[[create-database]]
12
13
== `CREATE DATABASE`
13
14
14
15
The command to create a database in a cluster is not significantly different from the command to create a database in a non-clustered environment (see xref:database-administration/standard-databases/create-databases.adoc[Create, start, and stop databases] for more information on database management on single servers).
15
16
The difference in a clustered environment is that the topology can be specified, i.e. how many primaries and secondaries are desired for the database.
16
-
To create a database `foo` with 3 servers hosting the database in primary mode and 2 servers in secondary mode, the command looks like this:
17
+
To create a database `foo` with 3 servers hosting the database in primary mode and 2 servers in secondary mode, run the following command:
Alternatively, you can use link:{neo4j-docs-base-uri}/cypher-manual/current/syntax/parameters[parameters] to provide the number of primaries and secondaries:
23
25
24
26
.Parameters
@@ -44,11 +46,13 @@ For example, if the cluster's servers are set up with mode constraints to contai
44
46
[NOTE]
45
47
====
46
48
If `TOPOLOGY` is not specified, the database is created according to `initial.dbms.default_primaries_count` and `initial.dbms.default_secondaries_count` specified in _neo4j.conf_.
47
-
After cluster startup, these values can be overwritten using the `dbms.setDefaultAllocationNumbers` procedure.
49
+
After cluster startup, you can overwrite these values using the `dbms.setDefaultAllocationNumbers` procedure.
48
50
====
51
+
49
52
[NOTE]
50
53
====
51
54
A `CREATE DATABASE` command allocates the database, therefore there is no requirement to execute `REALLOCATE DATABASES` (described in xref:clustering/servers.adoc#_hosting_databases_on_added_servers[Hosting databases on added servers]).
55
+
52
56
However, over time, or after several `CREATE DATABASE` commands have been issued, the distribution of databases can become unbalanced.
53
57
At this point you can run `REALLOCATE DATABASES` to make the cluster re-balance databases across all servers that are part of the cluster.
54
58
====
@@ -61,7 +65,7 @@ To alter the topology of or read/write access to a database after it has been cr
61
65
[[alter-topology]]
62
66
=== Alter database topology
63
67
64
-
To change the topology of the database `foo` from the previous example, the command can look like this:
68
+
To change the topology of the database `foo` from the previous example, run the following command:
65
69
66
70
[source, cypher]
67
71
----
@@ -95,19 +99,19 @@ Note, like `CREATE DATABASE`, the `ALTER DATABASE` command allocates the databas
95
99
96
100
This normally happens when the cluster is configured with more servers than the sum of the number of primaries and secondaries for any one database.
97
101
98
-
It is not possible to automatically transition to a topology with a single primary host. Attempting to do so results in an error.
102
+
It is not possible to automatically transition to a topology with a single primary host.
103
+
Attempting to do so results in an error.
99
104
100
-
However, it is possible to _manually_ do this transition.
101
-
The first step is to back up the database, see xref:backup-restore/index.adoc[Backup and restore] for more information.
102
-
Once the database is backed up, the next step is to drop the database, see xref:database-administration/standard-databases/delete-databases.adoc[Delete databases] for more information.
103
-
The last step is to either seed a cluster from the backup with the new topology, or to restore the backup on a single server.
105
+
However, it is possible to _manually_ do this transition:
106
+
107
+
. The first step is to back up the database, see xref:backup-restore/index.adoc[Backup and restore] for more information.
108
+
. Once the database is backed up, the next step is to drop the database.
109
+
See xref:database-administration/standard-databases/delete-databases.adoc[Delete databases] for more details.
110
+
. The last step is to either seed a cluster from the backup with the new topology, or to restore the backup on a single server.
104
111
See xref:clustering/databases.adoc#cluster-seed[Seed a cluster] further on for information on seeding.
105
112
106
113
Also, it is possible to automatically transition _from_ a topology with a single primary host to multiple primary hosts.
107
-
Keep in mind that during such a transition, the database will be unavailable for a short period of time.
108
-
109
-
`ALTER DATABASE` commands are optionally idempotent, with the default behavior to fail with an error if the database does not exist.
110
-
Appending `IF EXISTS` to the command ensures that no error is returned and nothing happens should the database not exist.
114
+
Keep in mind that during such a transition, the database is unavailable for a short period of time.
111
115
112
116
If the `ALTER DATABASE` command decreases the number of allocations of a database, allocations on xref:clustering/servers.adoc#cordoned-state[cordoned servers] are removed first.
In Neo4j 2025.04, the xref:procedures.adoc#procedure_dbms_cluster_recreateDatabase[`dbms.cluster.recreateDatabase()`] procedure is deprecated in favour of xref:procedures.adoc#procedure_dbms_recreateDatabase[`dbms.recreateDatabase()`].
253
-
254
-
The recreate procedure allows you to:
255
-
256
-
* Change the database store to a specified backup, while keeping all the associated privileges for the database.
257
-
258
-
* Make your database write-available again after it has been lost (for example, due to a disaster).
259
-
See xref:clustering/disaster-recovery.adoc[Disaster recovery] for more information.
260
-
261
-
* label:new[Introduced in 2025.02] Delete the data and schema for a database, while keeping the database privileges assigned to each role.
262
-
263
-
* label:new[Introduced in 2025.04] Alter the database store format when clearing the data and schema.
264
-
265
-
[CAUTION]
266
-
====
267
-
The recreate procedure works only for real user databases and not for composite databases, or the `system` database.
268
-
269
-
Remember that the recreate procedure results in downtime while the stores get updated.
270
-
The time is unbounded and may depend on different factors -- for example, the size of the store, network speed, etc.
271
-
====
272
-
273
-
The database in question can be in an `online` or `offline` state when it is recreated, but a successful operation starts the database regardless of its previous state.
274
-
275
-
If your database has Change Data Capture (CDC) enabled, the CDC chain will stop when the database is recreated, even though CDC remains enabled in the recreated database.
276
-
To restore CDC functionality, follow the guide on how link:https://neo4j.com/docs/cdc/current/existing-databases/[to initialize CDC applications from an existing database].
277
-
278
-
Before recreating a database, any eventual quarantined states need to be addressed.
279
-
For more information, see xref:database-administration/standard-databases/errors.adoc#quarantine[Standard databases -> Error handling].
280
-
281
-
You need xref:authentication-authorization/dbms-administration.adoc#access-control-dbms-administration-database-management[the `CREATE DATABASE` and `DROP DATABASE` privileges] to run the recreate procedure.
282
-
283
-
To check if the recreation is successful, use the `SHOW DATABASES` command and verify that all allocations have been started.
284
-
285
-
Additionally, you have the option to modify <<alter-topology-recreate, the topology>> during the recreation process.
286
-
However, note that up to Neo4j 2025.04, the store format, access, and enrichment cannot be altered during recreation.
287
-
Starting with 2025.04, the store format can only be altered if the `clearData` option is used.
288
-
289
-
[[recreate-seeding-options]]
290
-
=== Seeding options
291
-
292
-
The store to be used during the recreation of a database can be defined in different ways.
293
-
One method uses a backup, while others use available allocations in the cluster.
294
-
295
-
You can use either <<uri-seed, `seedURI`>> or <<seed-servers, `seedingServers`>> to specify the source from which the database should be recreated.
296
-
297
-
* If you define neither, an error is thrown.
298
-
299
-
* If you define both of them, then `seedingServers` must be an empty list.
300
-
See <<undefined-servers-backup, Undefined servers with fallback backup>> for more details.
301
-
302
-
* If `seedingServers` is not empty and `seedURI` is also defined, an error will occur.
303
-
304
-
[[uri-seed]]
305
-
==== Use backup as a seed
306
-
307
-
If you provide a URI to a backup or a dump, the stores on all allocations will be replaced by the backup or the dump at the given URI.
308
-
The new allocations can be put on any `ENABLED` server in the cluster.
309
-
See xref::database-administration/standard-databases/seed-from-uri.adoc[Seed from URI] for more details.
If you provide an empty list of seeding servers and do not specify a `seedURI`, Neo4j automatically selects all available allocations of the database as seeders.
345
-
The store will be replaced by the most up-to-date seeder available in the cluster.
There is an option to define a new topology when recreating a database.
369
-
This can be beneficial during a disaster, if enough servers are not available to recreate the database with the original topology.
370
-
When altering the total number of allocations down during a recreation, it is important to remember that the number of seeding servers cannot exceed the number of total allocations of the database.
371
-
This also holds true when using recreate with an empty list of seeders.
372
-
If there are more available servers in the cluster hosting the database than the number of new allocations, the recreation will fail.
0 commit comments