#### 23.6.8.2 Using The NDB Cluster Management Client to Create a Backup

[]()[]()

 Before starting a backup, make sure that the cluster is properly configured for performing one. (See [Section 23.6.8.3, “Configuration for NDB Cluster Backups”](mysql-cluster-backup-configuration.html).)

[]()

 The `START BACKUP` command is used to create a backup:

```
START BACKUP [backup_id]
    [encryption_option]
    [wait_option]
    [snapshot_option]

encryption_option:
ENCRYPT [PASSWORD=password]

password:
{'password_string' | "password_string"}

wait_option:
WAIT {STARTED | COMPLETED} | NOWAIT

snapshot_option:
SNAPSHOTSTART | SNAPSHOTEND
```

 Successive backups are automatically identified sequentially, so the *`backup_id`*, an integer greater than or equal to 1, is optional; if it is omitted, the next available value is used. If an existing *`backup_id`* value is used, the backup fails with the error Backup failed: file already exists. If used, the *`backup_id`* must follow `START BACKUP` immediately, before any other options are used.

 NDB 8.0.22 and later supports the creation of encrypted backups using `ENCRYPT PASSWORD=*`password`*`; the *`password`* must meet all of the following requirements:

* Uses any of the printable ASCII characters except `!`, `'`, `"`, `$`, `%`, `\`, and `^`

* Is no more than 256 characters in length

* Is enclosed by single or double quotation marks

 Starting with NDB 8.0.24, the `PASSWORD` clause can be omitted from *`encryption_option`*. In this case, the management client prompts the user for a password.

 It is possible using `PASSWORD` to set an empty password (`''` or `""`), but this is not recommended.

 An encrypted backup can be decrypted using any of the following commands:

* [**ndb\_restore**](mysql-cluster-programs-ndb-restore.html) [`--decrypt`](mysql-cluster-programs-ndb-restore.html#option_ndb_restore_decrypt) [`--backup-password=*`password`*`](mysql-cluster-programs-ndb-restore.html#option_ndb_restore_backup-password)

* [**ndbxfrm**](mysql-cluster-programs-ndbxfrm.html) [`--decrypt-password=*`password`*`](mysql-cluster-programs-ndbxfrm.html#option_ndbxfrm_decrypt-password) *`input_file`* *`output_file`*

* [**ndb\_print\_backup\_file**](mysql-cluster-programs-ndb-print-backup-file.html) `-P` *`password`* *`file_name`*

 NDB 8.0.24 and later supports the additional commands listed here:

* [**ndb\_restore**](mysql-cluster-programs-ndb-restore.html) [`--decrypt`](mysql-cluster-programs-ndb-restore.html#option_ndb_restore_decrypt) [`--backup-password-from-stdin`](mysql-cluster-programs-ndb-restore.html#option_ndb_restore_backup-password-from-stdin)

* [**ndbxfrm**](mysql-cluster-programs-ndbxfrm.html) [`--decrypt-password-from-stdin`](mysql-cluster-programs-ndbxfrm.html#option_ndbxfrm_decrypt-password-from-stdin) *`input_file`* *`output_file`*

* [**ndb\_print\_backup\_file**](mysql-cluster-programs-ndb-print-backup-file.html) `--backup-password=*`password`*` *`file_name`*

* [**ndb\_print\_backup\_file**](mysql-cluster-programs-ndb-print-backup-file.html) [`--backup-password-from-stdin`](mysql-cluster-programs-ndb-print-backup-file.html#option_ndb_print_backup_file_backup-password-from-stdin) *`file_name`*

* [**ndb\_mgm**](mysql-cluster-programs-ndb-mgm.html) [`--backup-password-from-stdin`](mysql-cluster-programs-ndb-mgm.html#option_ndb_mgm_backup-password-from-stdin) [`--execute "START BACKUP ..."`](mysql-cluster-programs-ndb-mgm.html#option_ndb_mgm_execute)

 See the descriptions of these programs for more information, such as additional options that may be required.

 The *`wait_option`* can be used to determine when control is returned to the management client after a `START BACKUP` command is issued, as shown in the following list:

* []() []() If `NOWAIT` is specified, the management client displays a prompt immediately, as seen here:

  ```
  ndb_mgm> START BACKUP NOWAIT
  ndb_mgm>
  ```

   In this case, the management client can be used even while it prints progress information from the backup process.

* []() []() With `WAIT STARTED` the management client waits until the backup has started before returning control to the user, as shown here:

  ```
  ndb_mgm> START BACKUP WAIT STARTED
  Waiting for started, this may take several minutes
  Node 2: Backup 3 started from node 1
  ndb_mgm>
  ```

* []() []() **`WAIT COMPLETED`** causes the management client to wait until the backup process is complete before returning control to the user.

`WAIT COMPLETED` is the default.

[]() []() []() []() A *`snapshot_option`* can be used to determine whether the backup matches the state of the cluster when `START BACKUP` was issued, or when it was completed. `SNAPSHOTSTART` causes the backup to match the state of the cluster when the backup began; `SNAPSHOTEND` causes the backup to reflect the state of the cluster when the backup was finished. `SNAPSHOTEND` is the default, and matches the behavior found in previous NDB Cluster releases.

Note

 If you use the `SNAPSHOTSTART` option with `START BACKUP`, and the [`CompressedBackup`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-compressedbackup) parameter is enabled, only the data and control files are compressed—the log file is not compressed.

 If both a *`wait_option`* and a *`snapshot_option`* are used, they may be specified in either order. For example, all of the following commands are valid, assuming that there is no existing backup having 4 as its ID:

```
START BACKUP WAIT STARTED SNAPSHOTSTART
START BACKUP SNAPSHOTSTART WAIT STARTED
START BACKUP 4 WAIT COMPLETED SNAPSHOTSTART
START BACKUP SNAPSHOTEND WAIT COMPLETED
START BACKUP 4 NOWAIT SNAPSHOTSTART
```

 The procedure for creating a backup consists of the following steps:

1. Start the management client ([**ndb\_mgm**](mysql-cluster-programs-ndb-mgm.html)), if it not running already.

2. Execute the **`START BACKUP`** command. This produces several lines of output indicating the progress of the backup, as shown here:

   ```
   ndb_mgm> START BACKUP
   Waiting for completed, this may take several minutes
   Node 2: Backup 1 started from node 1
   Node 2: Backup 1 started from node 1 completed
    StartGCP: 177 StopGCP: 180
    #Records: 7362 #LogRecords: 0
    Data: 453648 bytes Log: 0 bytes
   ndb_mgm>
   ```

3. []() []() When the backup has started the management client displays this message:

   ```
   Backup backup_id started from node node_id
   ```

   *`backup_id`* is the unique identifier for this particular backup. This identifier is saved in the cluster log, if it has not been configured otherwise. *`node_id`* is the identifier of the management server that is coordinating the backup with the data nodes. At this point in the backup process the cluster has received and processed the backup request. It does not mean that the backup has finished. An example of this statement is shown here:

   ```
   Node 2: Backup 1 started from node 1
   ```

4. The management client indicates with a message like this one that the backup has started:

   ```
   Backup backup_id started from node node_id completed
   ```

    As is the case for the notification that the backup has started, *`backup_id`* is the unique identifier for this particular backup, and *`node_id`* is the node ID of the management server that is coordinating the backup with the data nodes. This output is accompanied by additional information including relevant global checkpoints, the number of records backed up, and the size of the data, as shown here:

   ```
   Node 2: Backup 1 started from node 1 completed
    StartGCP: 177 StopGCP: 180
    #Records: 7362 #LogRecords: 0
    Data: 453648 bytes Log: 0 bytes
   ```

 It is also possible to perform a backup from the system shell by invoking [**ndb\_mgm**](mysql-cluster-programs-ndb-mgm.html) with the `-e` or [`--execute`](mysql-cluster-programs-ndb-mgm.html#option_ndb_mgm_execute) option, as shown in this example:

```
$> ndb_mgm -e "START BACKUP 6 WAIT COMPLETED SNAPSHOTSTART"
```

 When using `START BACKUP` in this way, you must specify the backup ID.

 Cluster backups are created by default in the `BACKUP` subdirectory of the [`DataDir`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-datadir) on each data node. This can be overridden for one or more data nodes individually, or for all cluster data nodes in the `config.ini` file using the [`BackupDataDir`](mysql-cluster-ndbd-definition.html#ndbparam-ndbd-backupdatadir) configuration parameter. The backup files created for a backup with a given *`backup_id`* are stored in a subdirectory named `BACKUP-*`backup_id`*` in the backup directory.

[]()**Cancelling backups.**  To cancel or abort a backup that is already in progress, perform the following steps:

1. Start the management client.

2. Execute this command:

   ```
   ndb_mgm> ABORT BACKUP backup_id
   ```

    The number *`backup_id`* is the identifier of the backup that was included in the response of the management client when the backup was started (in the message `Backup *`backup_id`* started from node *`management_node_id`*`).

3. The management client acknowledges the abort request with `Abort of backup *`backup_id`* ordered`.

   Note

    At this point, the management client has not yet received a response from the cluster data nodes to this request, and the backup has not yet actually been aborted.

4. After the backup has been aborted, the management client reports this fact in a manner similar to what is shown here:

   ```
   Node 1: Backup 3 started from 5 has been aborted.
     Error: 1321 - Backup aborted by user request: Permanent error: User defined error
   Node 3: Backup 3 started from 5 has been aborted.
     Error: 1323 - 1323: Permanent error: Internal error
   Node 2: Backup 3 started from 5 has been aborted.
     Error: 1323 - 1323: Permanent error: Internal error
   Node 4: Backup 3 started from 5 has been aborted.
     Error: 1323 - 1323: Permanent error: Internal error
   ```

    In this example, we have shown sample output for a cluster with 4 data nodes, where the sequence number of the backup to be aborted is `3`, and the management node to which the cluster management client is connected has the node ID `5`. The first node to complete its part in aborting the backup reports that the reason for the abort was due to a request by the user. (The remaining nodes report that the backup was aborted due to an unspecified internal error.)

   Note

    There is no guarantee that the cluster nodes respond to an `ABORT BACKUP` command in any particular order.

    The `Backup *`backup_id`* started from node *`management_node_id`* has been aborted` messages mean that the backup has been terminated and that all files relating to this backup have been removed from the cluster file system.

 It is also possible to abort a backup in progress from a system shell using this command:

```
$> ndb_mgm -e "ABORT BACKUP backup_id"
```

Note

 If there is no backup having the ID *`backup_id`* running when an `ABORT BACKUP` is issued, the management client makes no response, nor is it indicated in the cluster log that an invalid abort command was sent.

