Database Backup
Logical vs Physical Backups
Both of these methods have their own drawbacks and benefits.
Logical Database Backups
Logical backups consist of the SQL statements necessary to restore the data, such as CREATE DATABASE, CREATE TABLE and INSERT.
Logical backups are more portable, as the exported data can be imported later on any other server.
With logical backups only specific databases or tables or any other specific selection of data cab be exported and used as backup.
Logical backups are bigger in size.
Logical backups take considerable more time to backup and to restore.
Logical backups will only contain the data, without any configuration variables or transactional logs.
The huge data exports and full table scans which are unavoidable during any logical backup my put your database server under considerable stress and defeat the purpose of the servers cache and buffers, thus may result in undesirable effects on the operation and performance of your database server.
Physical Database Backups
Physical backups are performed by copying the individual data files or directories.
I won’t work by just copying the files out of the data directory of a running database server. Since data will almost certainly have changed in between the first and last byte copied. The result will thus not be usable for restoration. Either shut down the server completely before doing so, or use specific tools designed for the task. Since we don’t want any downtime, the latter is the only remaining option.
Physical backups wont work on other database server software, probably not even on other versions of the same software
Physical backups just backup the whole database server, not individual databases or files. However, some exceptions may apply depending on the server software and the backup tool used.
Physical backups are smaller in size.
When performed by a specific tools, physical backups normally don’t affect the normal operation or performance of the database server.
Mariabackup
Mariabackup is an open source tool provided by MariaDB for performing physical online backups of InnoDB, Aria and MyISAM tables. For InnoDB, “hot online” backups are possible.
Installation
Install from the same source and version as your MariaDB database server version:
$ sudo apt-get install mariadb-backup
Preparing for Backups
File-System Directory
In case of full backups, the file-system directory where the backup will be stored, needs to be empty and owned by the user who also runs the MySQL server:
$ sudo mkdir -p /var/backups/mariadb/full
$ sudo -u mysql rm -rf /var/backups/mariadb/full
$ sudo chown -R mysql:mysql /var/backups/mariadb
Datbase User
Let’s create a databse user on the server, with all needed privileges to perform the backups.
$ pwgen --secure 32 1
********
$ mysql -u root -p
CREATE USER 'mariabackup'@'localhost' \
IDENTIFIED BY '********';
GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT \
ON *.* TO 'mariabackup'@'localhost';
FLUSH PRIVILEGES;
exit
Configuration Options File
Let’s create a configuration file
/etc/mysql/conf.d/MariaBackup.cnf
to store all the options in a
“[mariabackup]” section.
Note
Despite this being a MariaDB specific configuration file, it needs to be stored in /etc/mysql/conf.d/ as [mariadb] is not recognized by mariabackup, the file would never be inlcuded otherwise. See MDEV-21298 <https://jira.mariadb.org/browse/MDEV-21298>_
# **************************************************
# MariDB Backup 10.5.8
# See https://mariadb.com/kb/en/mariabackup/
# **************************************************
# Despite this being a MariaDB specific configuration file, it needs to be
# stored in /etc/mysql/conf.d/ as [mariadb] is not recognized by mariabackup,
# the file would never be inlcuded otherwise. See MDEV-21298
[mariabackup]
user=mariabackup
password=********
Creating a Full Backup
Backups are performed as the MariaDB Linux user mysql, who also runs the database server.
Note
Note the space at the beginning of the following command-line. This inhibts the storage of the command and password in the shells command-line history.
$ sudo -u mysql mariabackup --backup \
--target-dir=/var/backups/mariadb/full \
When Mariabackup runs, it issues a global lock to prevent data from changing during the backup process and ensure a consistent record. If it encounters statements still in the process of executing, it waits until they complete before setting the lock.
[00] 2020-06-02 04:16:11 Connecting to MySQL server host: localhost
...
[00] 2020-06-02 04:16:22 completed OK!
Restoring a Full Backup
With Mariabackup database restoration is a two-step process.
Preparation
$ mariabackup --prepare
Copy Back
$ mariabackup --copy-back