Резервное копирование MySQL
Применимость: Linux, mysql
Слова для поиска: бэкап, СУБД
Задача:
При работе сервера баз данных файлы базы данных постоянно открыты на запись и непрерывно модифицируются и скопировать их в таком состоянии невозможно.
Мы используем для резервного копирования мгновенные снимки файловой системы (snapshot) и обходим это обстоятельство.
Однако это не гарантирует сохранение баз данных в согласованном состоянии и иногда приводит к невозможности восстановления работоспособного состояния сервера. Вероятность подобного очень невелика, но она существует по объективным причинам.
Решение:
Для решения этой задачи существуют специальные инструменты.
Mysqldump, mysqlhotcopy
Все СУБД имеют в своем составе собственные средства для получения резервной копии (дампа) базы данных. Это mysqldump для mysql, pg_dump для postgresql и т.п.
В качестве одного из возможного варианта решения этой задачи мы рекомендуем использовать утилиту mysqlhotcopy.
Утилита mysqlhotcopy представляет собой Perl-сценарий, использующий SQL-команды LOCK TABLES, FLUSH TABLES и Unix-утилиты cp или scp для быстрого получения резервной копии базы данных.
Подробности по ссылкам внизу статьи.
Еще более проработанное решение - утилита AutoMySQLBackup
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
Если просто выполнить команду 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