В дополнение к материалу, "Резервное копирование и восстановление баз данных с помощью программы Mysqldump", хотелось-бы рассказать о довольно простом и достаточно удобном средстве для автоматизации процесса, ежедневного, еженедельного и ежемесячного резервного копирования баз данных MySQL. Это обычный shell-скрипт, Automysqlbackup.sh, использующий для работы, программу mysqldump.
Последняя версия скрипта доступна тут:
Все необходимые переменные для настройки работы, прописаны в самом скрипте. Итак, настроим автоматическое резервное копирование.
- USERNAME=dbadmin
- Имя пользователя, для подключения к MySQL серверу.
- PASSWORD=dbadminpass
- Пароль пользователя.
- DBHOST=localhost
- Имя сервера. Можно использовать как доменное имя, так и IP адрес.
- DBNAMES="all"
- Список баз данных, для которых необходимо создавать резервные копии. Перечисляются через пробел. Если пробел присутствует в имени базы данных, здесь его необходимо прописать, заменив пробел символом %. Для этой переменной можно использовать ключевое слово All, для резервного копирования всех баз данных, данного хоста. При установке значения all, будут создаваться резервные копии, всех имеющихся и создаваемых баз данных, без изменения настроек данного скрипта. То есть, если в процессе работы, вы создадите еще несколько баз данных, они автоматически будут включены в резервное копирование. В данном случае, мы будем делать резервную копию всех баз, находящихся в рамках localhost.
- BACKUPDIR="/backup/db"
- Директория, где будут храниться резервные копии баз данных
- MAILCONTENT="log"
- Что отправлять по почте. Имеет следующие возможные значения: log - отправлять только отчет о проделанной работе; files - отправлять отчет и файлы резервных копий в аттаче письма; stdout - при запуске вручную, выводить отчет на экран; quiet - отправлять отчет только в случае возникновения ошибок;
- MAXATTSIZE="1000"
- Максимальный размер аттача в письме, высылаемом скриптом, в килобайтах
- MAILADDR="почтовый@адрес"
- Один или более, через пробел, адрес электронной почты.
- MDBNAMES="mysql $DBNAMES"
- Базы данных для ежемесячного резервного копирования. Как видите сюда добавлена системная база данных mysql в которой хранятся, например, имена и пароли пользователей, плюс все базы данных, перечисленные выше, в переменной DBNAMES.
- DBEXCLUDE=""
- Если переменная DBNAMES, установлена в значение "all", с помощью данной переменной, можно исключить необходимые базы из резервного копирования.
- CREATE_DATABASE=yes
- Добавляет в дамп соответствующий оператор. При восстановлении из резервной копии, создаются базы данных с исходными именами. Если установить значение, "no", при восстановлении, нужно будет вручную указать имя базы данных, в которую следует развернуть резервную копию. Не используется при SEPDIR=no
- SEPDIR=yes
- Использовать раздельные директории и файлы для каждой базы данных. Если установить значение, no, все базы будут сохранены в один большой дамп, что довольно удобно, например, при необходимости восстановить весь сервер. В нашем случае, каждая база будет сохранена в отдельный дамп, и восстанавливать нужно будет каждую в отдельности.
- DOWEEKLY=6
- В какой день недели, делать еженедельную резервную копию. 1 - Понедельник.
- COMP=gzip
- Тип сжатия. Возможные варианты: gzip и bzip2. bzip2, сжимает лучше, но при работе потребляет больше ресурсов.
- COMMCOMP=no
- Сжимать трафик между клиентом и сервером. Полезно при резервном копировании с удаленного сервера.
- LATEST=yes
- Сохранять дополнительные копии последнего дампа в отдельную директорию.
- MAX_ALLOWED_PACKET=
- Если в базе данных, используются большие поля типа BLOB, можно установить необходимый размер пакета.
- SOCKET=/tmp/mysql.sock
- Путь до файла сокета, если используется.
- #PREBACKUP="/etc/mysql-backup-pre"
- Выполнять определенные действия перед началом резервного копирования. Например выдавать в консоль сообщение типа "Starting backup".
- #POSTBACKUP="/etc/mysql-backup-post"
- То-же, что и предыдущая переменная, только выполнять действие, после завершения резервного копирования.
Как видите все очень просто. Для проверки правильности настроек, можете установить переменную MAILCONTENT="stdout" и запустить скрипт вручную, из командной строки. После завершения резервного копирования, будет выведен отчет о проделанных действиях. Теперь можно поместить запуск automysqlbackup.sh в расписание демона cron, файл /etc/crontab, следующей строкой:
0 3 * * * root /usr/local/scripts/automysqlbackup.sh
При такой настройке, automysqlbackup.sh, будет запускаться ежедневно в 3 часа ночи.
Восстановление из резервной копии, производится как обычно, с использованием утилиты mysql, естественно предварительно распаковав файл дампа из архива. Например:
vds-admin$/backup/db/daily/drupal/ gunzip drupal_20090811_11h54m.Tuesday.sql.gz
Получим файл резервной копии drupal_20090811_11h54m.Tuesday.sql. Теперь восстанавливаем:
vds-admin$/ mysql -u dbadmin -pdbadminpass database < /backup/db/daily/drupal/drupal_20090811_11h54m.Tuesday.sql
Небольшое замечание. Данный скрипт не производит ротацию ежемесячных резервных копий, то есть каждая новая копия, затирает предыдущую. Если вас это не устраивает по каким-то причинам, например вам нужно хранить резервные копии всех месяцев, можете дописать скрипт, или копировать файлы ежемесячных дампов через тот-же cron, ну или вообще вручную.
Удачи