Инкрементное резервное копирование и восстановление с Mariabackup
При использовании Mariabackup у вас есть возможность выполнить полное или инкрементное резервное копирование. Полные резервные копии создают полную копию в пустом каталоге, в то время как инкрементные резервные копии обновляют предыдущую резервную копию новыми данными. На этой странице документируются инкрементные резервные копии.
Страницы InnoDB содержат номера последовательности журнала или LSN. Всякий раз, когда вы изменяете строку в любой таблице InnoDB в базе данных, движок хранения увеличивает это число. При выполнении инкрементного резервного копирования Mariabackup проверяет последний LSN для резервной копии по отношению к LSN, содержащимся в базе данных. Затем он обновляет любые файлы резервной копии, которые отстали.
Резервное копирование сервера базы данных
Для создания инкрементной резервной копии вам сначала необходимо создать полную резервную копию. Для резервного копирования базы данных необходимо запустить Mariabackup с опцией --backup для указания выполнения резервного копирования и с опцией --target-dir для указания места размещения файлов резервной копии. При создании полной резервной копии целевой каталог должен быть пустым или не должен существовать.
Для создания резервной копии выполните следующую команду:
$ mariabackup --backup \ --target-dir=/var/mariadb/backup/ \ --user=mariabackup --password=mypassword
Это резервирует все базы данных в целевой каталог /var/mariadb/backup. Если вы посмотрите в этот каталог на файл xtrabackup_checkpoints, вы сможете увидеть данные LSN, предоставленные InnoDB.
Например:
backup_type = full-backuped from_lsn = 0 to_lsn = 1635102 last_lsn = 1635102 recover_binlog_info = 0
Резервное копирование инкрементных изменений
После создания полной резервной копии на вашей системе вы также можете резервировать инкрементные изменения так часто, как вам нужно.
Для выполнения инкрементного резервного копирования необходимо запустить Mariabackup с опцией --backup для указания выполнения резервного копирования и с опцией --target-dir для указания места размещения инкрементных изменений. Целевой каталог должен быть пустым. Вам также нужно запустить его с опцией --incremental-basedir для указания пути к полной резервной копии, созданной выше. Например:
$ mariabackup --backup \ --target-dir=/var/mariadb/inc1/ \ --incremental-basedir=/var/mariadb/backup/ \ --user=mariabackup --password=mypassword
Эта команда создает ряд файлов delta, которые хранят инкрементные изменения в /var/mariadb/inc1. В этом каталоге вы можете найти аналогичный файл xtrabackup_checkpoints, содержащий обновлённые значения LSN.
Например:
backup_type = incremental from_lsn = 1635102 to_lsn = 1635114 last_lsn = 1635114 recover_binlog_info = 0
Для выполнения дополнительных инкрементных резервных копий вы можете использовать целевой каталог предыдущей инкрементной резервной копии в качестве инкрементного базового каталога следующей инкрементной резервной копии. Например:
$ mariabackup --backup \ --target-dir=/var/mariadb/inc2/ \ --incremental-basedir=/var/mariadb/inc1/ \ --user=mariabackup --password=mypassword
Сочетание с --stream выводом
При использовании --stream, например, для сжатия или шифрования с помощью внешних инструментов, файл xtrabackup_checkpoints, содержащий информацию о том, с чего продолжить при следующем инкрементном резервном копировании, также будет частью сжатого/зашифрованного файла резервной копии, и поэтому по умолчанию не будет напрямую доступен.
Однако, каталог с дополнительной копией этого файла можно создать с помощью опции --extra-lsndir=..., а затем этот каталог можно передать в следующую инкрементную резервную копию --incremental-basedir=..., например:
# initial full backup $ mariabackup --backup --stream=mbstream \ --user=mariabackup --password=mypassword \ --extra-lsndir=backup_base | gzip > backup_base.gz # incremental backup $ mariabackup --backup --stream=mbstream \ --incremental-basedir=backup_base \ --user=mariabackup --password=mypassword \ --extra-lsndir=backup_inc1 | gzip > backup-inc1.gz
Подготовка резервной копии
После выполнения вышеуказанных шагов у вас есть три резервные копии в /var/mariadb: первая - полная резервная копия, остальные - инкременты на этой первой резервной копии. Для восстановления резервной копии в базе данных вам сначала нужно применить инкрементные резервные копии к основной полной резервной копии. Это делается с помощью опции команды --prepare. В MariaDB 10.1, вам также нужно будет использовать опцию --apply-log-only.
В MariaDB 10.2 и более поздних версиях выполните следующие действия:
Сначала подготовьте основную резервную копию:
$ mariabackup --prepare \ --target-dir=/var/mariadb/backup
Выполнение этой команды синхронизирует базу полной резервной копии, то есть /var/mariadb/backup, с изменениями, содержащимися в журнале переопределения InnoDB, собранном во время создания резервной копии.
Затем применить инкрементные изменения к основной полной резервной копии:
$ mariabackup --prepare \ --target-dir=/var/mariadb/backup \ --incremental-dir=/var/mariadb/inc1
Выполнение этой команды синхронизирует базу полной резервной копии, то есть /var/mariadb/backup, с изменениями, содержащимися в первой инкрементной резервной копии.
Для каждой оставшейся инкрементной резервной копии повторите последний шаг, чтобы синхронизировать базу полной резервной копии с изменениями, содержащимися в этой инкрементной резервной копии.
В MariaDB 10.1 выполните следующие действия:
Сначала подготовьте базу резервной копии:
$ mariabackup --prepare --apply-log-only \ --target-dir=/var/mariadb/backup
Выполнение этой команды синхронизирует базу полной резервной копии, то есть /var/mariadb/backup, с изменениями, содержащимися в журнале переопределения InnoDB, собранном во время создания резервной копии.
Затем применить инкрементные изменения к основной полной резервной копии:
$ mariabackup --prepare --apply-log-only \ --target-dir=/var/mariadb/backup \ --incremental-dir=/var/mariadb/inc1
Выполнение этой команды синхронизирует базу полной резервной копии, то есть /var/mariadb/backup, с изменениями, содержащимися в первой инкрементной резервной копии.
Для каждой оставшейся инкрементной резервной копии повторите последний шаг, чтобы синхронизировать базу полной резервной копии с изменениями, содержащимися в этой инкрементной резервной копии.
Восстановление резервной копии
После применения всех инкрементных резервных копий к основной, вы можете восстановить резервную копию, используя либо опцию --copy-back, либо опцию --move-back. Опция --copy-back позволяет сохранить исходные файлы резервной копии. Опция --move-back фактически перемещает файлы резервной копии в datadir, поэтому исходные файлы резервной копии будут потеряны.
- Сначала остановите процесс MariaDB Server.
- Затем убедитесь, что
datadirпуст.
- Затем запустите Mariabackup с одной из упомянутых выше опций:
$ mariabackup --copy-back \ --target-dir=/var/mariadb/backup/
- Затем может потребоваться исправить права доступа к файлам.
При восстановлении базы данных Mariabackup сохраняет права доступа к файлам и каталогам резервной копии. Однако он записывает файлы на диск как пользователь и группа, выполняющие восстановление базы данных. Поэтому после восстановления резервной копии вам может потребоваться изменить владельца каталога данных, чтобы он соответствовал пользователю и группе MariaDB Server, обычно mysql для обоих. Например, чтобы рекурсивно изменить владение файлами на пользователя и группу mysql, можно выполнить:
$ chown -R mysql:mysql /var/lib/mysql/
- Наконец, запустите процесс MariaDB Server.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/incremental-backup-and-restore-with-mariabackup/