Как создавать горячие резервные копии баз данных MySQL с помощью Percona XtraBackup на CentOS 7

Вступление

При работе с активными системами баз данных очень распространенной проблемой является создание оперативных резервных копий, то есть создание резервных копий без остановки службы базы данных или ее доступ только для чтения. Простое копирование файлов данных активной базы данных часто приводит к копии внутренней базы данных, которая является внутренне несовместимой, т.е. он не будет использоваться или будет отсутствовать транзакции, которые произошли во время копирования. С другой стороны, остановка базы данных для запланированного резервного копирования делает зависящие от базы данных части вашего приложения недоступными. Percona XtraBackup - это утилита с открытым исходным кодом, с помощью которой можно обойти эту проблему и создать согласованные полные или инкрементные резервные копии работающих баз данных MySQL, MariaDB и Percona Server, также известные как «горячие» резервные копии.

В отличие от logical backups, которые создаются такими утилитами, как mysqldump, XtraBackup создает physical backups файлов базы данных - он создает копию файлов данных. Затем он применяет журнал транзакций (a.k.a. redo log) к физическим резервным копиям, чтобы засыпать любые активные транзакции, которые не были завершены во время создания резервных копий, что приводит к согласованным резервным копиям работающей базы данных. Полученную резервную копию базы данных можно затем сохранить в удаленном месте, используя https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on- a-vps [rsync], система резервного копирования, такая как Bacula или https: // www .digitalocean.com / сообщество / учебные пособия / понимание-digitalocean-droplet-backups [резервные копии DigitalOcean].

Из этого туториала Вы узнаете, как выполнить полное горячее резервное копирование баз данных MySQL или MariaDB с помощью Percona XtraBackup на CentOS 7. Процесс восстановления базы данных из резервной копии также рассматривается. Версия этого руководства для Ubuntu может быть найдена https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-ubuntu-14 -04 [здесь].

Предпосылки

Чтобы следовать этому руководству, у вас должно быть следующее:

  • Привилегии суперпользователя в системе CentOS 7

  • Работающая база данных MySQL или MariaDB

  • Доступ к администратору (root) вашей базы данных

Кроме того, чтобы выполнить горячее резервное копирование базы данных, ваша система баз данных должна использовать механизм хранения * InnoDB *. Это связано с тем, что XtraBackup использует журнал транзакций, который поддерживает InnoDB. Если в ваших базах данных используется механизм хранения MyISAM, вы все равно можете использовать XtraBackup, но база данных будет заблокирована на короткое время к концу резервного копирования.

Проверьте механизм хранения

Если вы не уверены, какой механизм хранения используют ваши базы данных, вы можете посмотреть его различными способами. Одним из способов является использование консоли MySQL для выбора рассматриваемой базы данных, а затем вывод статуса каждой таблицы.

Сначала войдите в консоль MySQL:

mysql -u root -p

Затем введите свой корневой пароль MySQL.

В командной строке MySQL выберите базу данных, которую вы хотите проверить. Обязательно укажите здесь собственное имя базы данных:

USE ;

Затем выведите его статусы таблицы:

SHOW TABLE STATUS\G;

Двигатель должен быть указан для каждой строки в базе данных:

Example Output:...
*************************** 11. row ***************************
          Name: wp_users
        Engine:
...

Как только вы закончите, оставьте консоль:

exit

Давайте установим Percona XtraBackup.

Установите Percona XtraBackup

Самый простой способ установить Percona XtraBackup - использовать yum, так как репозиторий Percona предоставляет RPM.

sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

Затем вы можете запустить эту команду для установки XtraBackup:

sudo yum install percona-xtrabackup

Примите любые подтверждающие запросы для завершения установки.

XtraBackup состоит в основном из программы XtraBackup и Perl-скрипта + innobackupex +, который мы будем использовать для создания резервных копий нашей базы данных.

Первые приготовления

Перед первым использованием XtraBackup нам необходимо подготовить пользователя системы и MySQL, который будет использовать XtraBackup. Этот раздел охватывает начальную подготовку.

Пользователь системы

Если вы не планируете использовать системного пользователя root, вы должны выполнить некоторые базовые приготовления, чтобы гарантировать правильное выполнение XtraBackup. Мы предполагаем, что вы вошли в систему как пользователь, который запустит XtraBackup, и что он имеет привилегии суперпользователя.

Добавьте системного пользователя в группу «mysql» (замените свое фактическое имя пользователя):

sudo gpasswd -a  mysql

Пока мы это делаем, давайте создадим каталог, который будет использоваться для хранения резервных копий, которые создает XtraBackup:

sudo mkdir -p /data/backups
sudo chown -R : /data

Команда + chown + гарантирует, что пользователь сможет писать в каталог резервных копий.

MySQL User

XtraBackup требует пользователя MySQL, который он будет использовать при создании резервных копий. Давайте создадим его сейчас.

Войдите в консоль MySQL с помощью этой команды:

mysql -u root -p

Укажите пароль root для MySQL.

В командной строке MySQL создайте нового пользователя MySQL и назначьте ему пароль. В этом примере пользователь называется «bkpuser», а пароль - «bkppassword». Измените оба из них на что-то безопасное:

CREATE USER ''@'localhost' IDENTIFIED BY '';

Затем предоставьте всем новым пользователям MySQL права на перезагрузку, блокировку и репликацию для всех баз данных:

GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ''@'localhost';
FLUSH PRIVILEGES;

Это минимальные необходимые привилегии, необходимые XtraBackup для создания полных резервных копий баз данных.

Когда вы закончите, выйдите из консоли MySQL:

exit

Теперь мы готовы создать полную резервную копию наших баз данных.

Выполнить полное горячее резервное копирование

В этом разделе описываются шаги, необходимые для создания полной горячей резервной копии базы данных MySQL с использованием XtraBackup. Убедившись в правильности прав доступа к файлу базы данных, мы будем использовать XtraBackup, чтобы * создать * резервную копию, а затем * подготовить * ее.

Обновление Datadir Permissions

В CentOS 7 файлы данных MySQL хранятся в + / var / lib / mysql, который иногда называют * datadir *. По умолчанию доступ к каталогу данных ограничен пользователем + mysql. XtraBackup требует доступа к этому каталогу для создания своих резервных копий, поэтому давайте запустим несколько команд, чтобы убедиться, что системный пользователь, которого мы настроили ранее - как член группы mysql, - имеет надлежащие разрешения:

sudo chown -R mysql: /var/lib/mysql
sudo find /var/lib/mysql -type d -exec chmod 775 "{}" \;

Эти команды гарантируют, что все каталоги в каталоге данных доступны для группы mysql и должны выполняться перед каждым резервным копированием.

If you added your user to the mysql group in the same session, you will need to login again for the group membership changes to take effect.

Создать резервную копию

Теперь мы готовы создать резервную копию. Когда база данных MySQL запущена, используйте утилиту + innobackupex +. Запустите эту команду после обновления имени пользователя и пароля, чтобы они соответствовали имени пользователя MySQL:

innobackupex --user=  --password= --no-timestamp /data/backups/new_backup

Это создаст резервную копию базы данных в указанном месте, + / data / backups / new_backup +:

innobackupex outputinnobackupex: Backup created in directory '/data/backups/new_backup'
150420 13:50:10  innobackupex: Connection to database server closed
150420 13:50:10  innobackupex: completed OK!
  • В качестве альтернативы *, вы можете опустить + - no-timestamp +, чтобы XtraBackup создал каталог резервных копий на основе текущей временной метки, например так:

innobackupex --user=  --password= /data/backups

Это создаст резервную копию базы данных в автоматически сгенерированном подкаталоге, например так:

innobackupex output - no timestampinnobackupex: Backup created in directory '/data/backups/'
150420 13:50:10  innobackupex: Connection to database server closed
150420 13:50:10  innobackupex: completed OK!

Любой метод, который вы выберете, должен вывести «innobackupex: выполнено ОК!» В последней строке его вывода. В результате успешного резервного копирования будет создана копия базы данных datadir, которую необходимо * подготовить *, прежде чем ее можно будет использовать.

Подготовить резервную копию

Последний шаг в создании горячей резервной копии с помощью XtraBackup - это * подготовка *. Это включает в себя «воспроизведение» журнала транзакций для применения любой незафиксированной транзакции к резервной копии. Подготовка резервной копии сделает данные согласованными и пригодными для восстановления.

Следуя нашему примеру, мы подготовим резервную копию, которая была создана в + / data / backups / new_backup +. Замените это на путь к вашей фактической резервной копии:

innobackupex --apply-log /data/backups/

Опять же, вы должны увидеть «innobackupex: завершено ОК!» В качестве последней строки вывода.

Ваша резервная копия базы данных создана и готова к использованию для восстановления базы данных. Кроме того, если у вас есть система резервного копирования файлов, такая как Bacula, эта резервная копия базы данных должна быть включены как часть вашего резервного выбора.

В следующем разделе будет описано, как восстановить базу данных из только что созданной резервной копии.

Выполнить восстановление из резервной копии

Восстановление базы данных с помощью XtraBackup требует, чтобы база данных была остановлена, а ее каталог данных пуст.

Остановите службу MySQL с помощью этой команды:

sudo systemctl stop mariadb

Затем переместите или удалите содержимое каталога данных (+ / var / lib / mysql). В нашем примере мы просто переместим его во временное местоположение:

mkdir /tmp/mysql
mv /var/lib/mysql/* /tmp/mysql/

Теперь мы можем восстановить базу данных из вашей резервной копии, «новой резервной копии»:

innobackupex --copy-back /data/backups/

Если все прошло успешно, в последней строке вывода должно появиться «innobackupex: завершено, ОК!»

Восстановленные файлы в datadir, вероятно, будут принадлежать пользователю, от имени которого вы запустили процесс восстановления. Измените владельца обратно на mysql, чтобы MySQL мог читать и записывать файлы:

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

Теперь мы готовы запустить MySQL:

sudo systemctl start mariadb

Это оно! Ваша восстановленная база данных MySQL должна быть запущена.

Заключение

Теперь, когда вы можете создавать «горячие» резервные копии своей базы данных MySQL, используя Percona XtraBackup, есть несколько вещей, которые вы должны рассмотреть при настройке.

Прежде всего, желательно автоматизировать процесс, чтобы у вас были резервные копии, созданные по расписанию. Во-вторых, вы должны сделать удаленные копии резервных копий, в случае, если у вашего сервера базы данных есть проблемы, используя что-то вроде https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local -and-remote-directory-on-a-vps [rsync], сетевая система резервного копирования файлов, такая как https://www.digitalocean.com/community/tutorials/how-to-install-bacula-server-on-centos- 7 [Bacula] или DigitalOcean backups. После этого вы захотите изучить * вращение * ваших резервных копий (удаление старых резервных копий по расписанию) и создание инкрементных резервных копий (с XtraBackup) для экономии места на диске.

Удачи!

Related