When using Mariabackup, you have the option of performing a full or incremental backup. Full backups create a complete copy in an empty directory while incremental backups update a previous backup with new data. This page documents full backups.

Backing up Database

In order to back up the database, you need to run Mariabackup with the --backup command option. Use the --target-dir option to define were it places the backup files. When taking a full backup, the target directory must be empty or not exist.

To take a backup, run the following command:

$ mariabackup --backup --target-dir /var/mariadb/backup/ \
      --user backup_user --password backup_passwd

The time the backup takes depends on the size of the databases or tables you're backing up. You can cancel the backup if you need to, as it does not modified the database.

Mariabackup adds a series of files to the target directory. If the target directory doesn't exist it creates it. If the target directory exists and contains files, the backup errors out.

$ ls /var/mariadb/backup/

aria_log.0000001  mysql                   xtrabackup_checkpoints
aria_log_control  performance_schema      xtrabackup_info
backup-my.cnf     test                    xtrabackup_logfile
ibdata1           xtrabackup_binlog_info

Backing Up Encrypted Tables

Mariabackup will ask the server for all encryption keys and plugins and will use these when applying the encrypted redo log to the encrypted tables. In other words, normally one doesn't need any extra options to backup or restore encrypted tables.

Restoring from Backups

The data files that Mariabackup creates in the target directory are not point-in-time consistent, given that the data is taken at different times during the backup operation. If you try to restore from these files, InnoDB notices the discrepancies and crashes to protect you from corrupted data.

Before you can restore from a backup, you first need to prepare it to normalize these files. You can do so with the --prepare command option.

$ mariabackup --prepare --target-dir /var/mariadb/backup/ \
      --user backup_user --password backup_passwd

Once this process is complete, you can restore data from the backup using either the --copy-back or the --move-back command options. Copy it when you want to keep the backup, move it when you don't want to keep it. Stop the MariaDB Server, then run the command with one of these command.

$ mariabackup --copy-back --target-dir /var/mariadb/backup/ \
      --user backup_user --password backup_passwd

Bear in mind, the data directory must be empty before restoring the backup.

When Mariabackup restores a database, it preserves the file and directory privileges of the backup. However, it writes the files to disk as the user and group restoring the database. As such, after restoring a backup, you may need to adjust the owner of the data directory to match the user and group for the MariaDB Server, typically mysql for both. For instance,

$ chown -R mysql:mysql /var/lib/mysql/

Restoring with Other Tools

In the event that you don't want to use the tool to restore you database, you can manage the same using either cp or rysnc to copy the data from the target directory to the data directory. For instance,

$ rsync -avrP /var/mariadb/backup /var/lib/mysql/
$ chown -R mysql:mysql /var/lib/mysql/
$ rm /var/lib/mysql/ib_logfile*

The last step is needed with Mariabackup 10.2 for ensuring that the server will not attempt crash recovery with an old redo log. Mariabackup 10.1 would create redo log files after --prepare, but Mariabackup 10.2 will not create them, so that the LSN will not unnecessarily move forward. Instead, starting with Mariabackup 10.2.10, it creates a dummy (empty) ib_logfile0 to prevent an accidental startup with old redo log files.


Comments loading...