Скрипт automysqlbackup для автоматизации резервного копирования

Администрирование > Разное

Это обычный shell-скрипт,Automysqlbackup.sh, использующий для работы, программу mysqldump.

Последняя версия скрипта доступна тут: sourceforge.net.

Все необходимые переменные для настройки работы, прописаны в самом скрипте. Итак, настроим автоматическое резервное копирование.

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, ну или вообще вручную.

Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>