# Hot backup and restore

Hot backup/restore feature allows to backup and restore immudb database without stopping immudb engine. Database remains accessible during backup process. It is possibly to perform full or incremental/differential backup and restore.

Both backup and restore functions can use streams or files as a source/destination.

Backup file is not compressed, assuming user may use any suitable method (see examples for bzip2 compression).

# Backup

immuadmin hot-backup <database> [-o <file> [--append]] [--start-tx]

# Full backup

To run full database backup, execute immuadmin hot-backup <database> command, specifying the optional backup file name with -o options. If -o option is not specified, output is sent to stdout.

If backup file is specified with -o option, the file is created. If file already exists, backup process fails.

# Incremental backup

When backup database up to the existing file, immuadmin tools finds the last backed up database transaction in file, verifies its checksum and appends only database changes, made after this transaction. immuadmin requires user to specify --append command line option to append to existing file.

When backup up to the stream, immuadmin doesn't have information about last backup up transaction, however user can specify the ID of the transaction to start from with --start-tx command line option. It allows user to implement incremental/differential backup strategy, using streams.

# Restore

immuadmin hot-restore <database> [-i <file>] [--append] [--force] [--force-replica]

# Full restore

To run full restore, execute immuadmin hot-restore <database> command, specifying the optional backup file name with -o options. If -o option is not specified, input data is read from stdin.

If database already exists, restore process fails.

TIP

To boost performance while restoring from a backup, immudb could be run without strong durability warranties i.e. ./immudb --synced=false. If a reboot or crash occurs while restoring from a backup, you may have to restart the restore process.

Synced mode prevents data loss from unexpected crashes and shutdowns, but affects performance (default true), which is why you may want to restart immudb server with default settings after restoring.

# Incremental restore

If database already exists, it is possible to append new data from backup file to the database. In this case user has to specify --append flag.

# Transaction overlap/gap handling

immuadmin tries to verify that backup file and database where data are being restored to have the same origin. To do this immuadmin finds the last transaction in source database and the same transaction in the backup file, and check transaction signatures. If transactions don't match, restore isn't possible.

When there is no overlap between transactions in database and file, transaction verification is not possible. However, if there is no gap between transactions, immuadmin allows to bypass verification with --force command line option. If there is a gap between last transaction in database and first transaction in file, restore isn't possible.

# Transaction verification

During restore process immuadmin checks if checksum, reported by database after restoration of the transaction, matches the one stored in the file during backup process. It allows to detect backup file accidental or malicious corruption.

# Replica flag handling

It is possible to restore data only to the replica database. During full restore database automatically created as replica (replica flag is switched off after restore), but for incremental restore immuadmin assumes database is already in replica mode (user can use immuadmin database update <database> --replication-is-replica command to switch on replica mode).

However, it is possible to automatically switch on and off replica mode for incremental backup using --force-replica command line option.

# Verifying backup file

immuadmin hot-restore --verify [-i <file>]

It is possible to verify backup file/stream using immuadmin hot-restore --verify command. It only checks the correctness of database file, e.g. file format and correct sequence of transactions in file. The only way to detect data corruption is to restore data.

# Examples

Full backup to file:

immuadmin hot-backup foo -o foo.backup
immuadmin hot-backup foo > foo.backup

Incremental backup to file:

immuadmin hot-backup foo -o foo.backup --append

Incremental backup with bzip2 compression:

immuadmin hot-backup foo --start-tx 123 | bzip2 > foo.bz2

Full restore

immuadmin hot-restore bar -i foo.backup
immuadmin hot-restore bar < foo.backup

Full restore from bzip2-compressed file

bunzip2 foo.bz2 -c | immuadmin hot-restore bar

Incremental restore with automatic switching of replica mode

immuadmin hot-restore bar -i foo.backup --append --force-replica

Copy database:

immuadmin hot-backup foo | immuadmin hot-restore bar