Colobridge WIKI

Резервное копирование MySQL

Применимость: Linux, mysql

Слова для поиска: бэкап, СУБД


При работе сервера баз данных файлы базы данных постоянно открыты на запись и непрерывно модифицируются и скопировать их в таком состоянии невозможно.

Мы используем для резервного копирования мгновенные снимки файловой системы (snapshot) и обходим это обстоятельство.

Однако это не гарантирует сохранение баз данных в согласованном состоянии и иногда приводит к невозможности восстановления работоспособного состояния сервера. Вероятность подобного очень невелика, но она существует по объективным причинам.

Для решения этой задачи существуют специальные инструменты.

Все СУБД имеют в своем составе собственные средства для получения резервной копии (дампа) базы данных. Это mysqldump для mysql, pg_dump для postgresql и т.п.

В качестве одного из возможного варианта решения этой задачи мы рекомендуем использовать утилиту mysqlhotcopy.

Утилита mysqlhotcopy представляет собой Perl-сценарий, использующий SQL-команды LOCK TABLES, FLUSH TABLES и Unix-утилиты cp или scp для быстрого получения резервной копии базы данных.

Подробности по ссылкам внизу статьи.

Еще более проработанное решение - утилита AutoMySQLBackup

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

Прочие функции:

  • Уведомление по электронной почте
  • Сжатие и шифрование копий
  • Управление правилами ротации
  • Инкрементальные резервные копии

Порядок установки в CentOS:

1. Скачайте последнюю версию и распакуйте архив в отдельном каталоге и выполните скрипт установки install.sh

Например:

mkdir ~/tmp1
cd ~/tmp1
wget http://downloads.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%203.0/automysqlbackup-v3.0_rc6.tar.gz
tar -xzf automysqlbackup-v3.0_rc6.tar.gz
./install.sh

Порядок установки в Debian / Ubuntu:

Пакет automysqlbackup есть в репозиториях debian и усттановка производится командой:

apt-get install automysqlbackup

Для настройки можно использовать глобальный файл параметров (/etc/automysqlbackup/automysqlbackup.conf) или создать отдельный конфиг для каждого задания, например - /etc/automysqlbackup/myserver.conf

2. Откройте в любимом текстовом редакторе файл /etc/automysqlbackup/myserver.conf, раскомментруйте и укажите необходимые вам параметры.

Наиболее важные - имя, пароль и где хранить архивы:

CONFIG_mysql_dump_username='root'
CONFIG_mysql_dump_password='mega_password'
CONFIG_backup_dir='/var/backup/db'
CONFIG_mail_address='webmaster@mydomain.com'

Каждый параметр описан в конфигурационном файле, изучите его не спеша.

Большинство параметров закомментировано символом #. Если вас устраивает значение по умолчанию оставьте параметр как есть, если нужно изменить значение, то нужно убрать # и задать желаемое значение.

Уделите внимание разделу «Rotation Settings» в конфигурационном файле если у вас особые правила ротации бэкапов.

Глобальные параметры automysqlbackup в Debian находятся в файле /etc/default/automysqlbackup

Если просто выполнить команду automysqlbackup, то он будет выполнена с параметрами из файла /etc/automysqlbackup/automysqlbackup.conf Если вы создали для каждой базы данных отдельный конфиг, то можно выполнить команду с указанием конкретного конфига:

automysqlbackup -c /etc/automysqlbackup/myserver.conf

Для выполнения в фоновом режиме, что подходит для заданий cron лучше использовать:

automysqlbackup -bc /etc/automysqlbackup/myserver.conf

Пример задания для cron (делать бэкап ежедневно в 4:22):

22 4  *   *   *  root /usr/local/bin/automysqlbackup -bc /etc/automysqlbackup/myserver.conf

Убедитесь, что путь к исполняемому файлу у вас именно такой

Если база данных удалена, то создайте новую. Пример команды создания базы данных.

mysqladmin -u USER -pPASSWORD create NEWDATABASE

Выберите нужный файл и декопрессируйте его и загрузите в базу данных. В зависимости от выбранного в конфиге automysqlbackup архиватора (компрессора) используйте соответствующую утилиту - gunzip для file.gz (или bunzip2 для file.bz2)

Это можно сделать одной командной конструкцией:

Для архивов gzip:

gunzip < /path/to/backupfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

или так

zcat /path/to/backupfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

Для архивов bzip2

bunzip2 < /path/to/backupfile.sql.bz2 | mysql -u USER -pPASSWORD DATABASE

или так

bzcat /path/to/backupfile.sql.bz2 | mysql -u USER -pPASSWORD DATABASE