Резервное копирование с помощью backupninja

centos backupninja резервное копирование tar mysqldump

Задача

Имеем сайт на Drupal, развернутый в CentOS 6. Окружение вкратце представляет из себя

  • Apache
  • MariaDB
  • Memcached
  • PHP

Нам нужно делать резерыне копии apache, mariadb, memcached, дамп базы и копию файлов из /var/www/html. Данные будем сохранять в директорию /backups.

Установка

Для установки backupninja в CentOS удобно использовать репозиторий EPEL

12
rpm -Uhv http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmyum -y install backupninja dialog

Настройка

  • Глобальные настройки backupninja находятся в /etc/backupninja.conf. Там все побробно комментировано и рассматривать я них здесь не буду.
  • Примеры конфигов лежат в /usr/share/backupninja/
  • Здесь я настраиваю backupninja при помощи утилиты ninjahelper, идущей в комплекте. Там все очень просто и пошагово. Ниже пример сгенерированных конфигов, мною в дальнейшем слегка поправленные. В общем-то, в будущем проще эти конфиги править, нежели запускать пошаговый мастер настройки.

MariaDB

  • Рекомендую для копирования использовать mysqldump, а не mysqlhotcopy, так как первый вариант можно легко будет развернуть на любом сервере, а про второй читайте тут: .
  • В конфиге ниже я использую пользователя root, для доступа к данным. Если хотите болшь секурности, то заведите отдельного пользователя, дайте ему права на чтение нужных баз и/или таблиц. Примерно так 
    GRANT USAGE ON dbname.* TO 'ninja'[at]'%' IDENTIFIED BY 'ninjapwd';

 

  • В данном конфигурационном файле я копирую отдельную базу данных по имени dbname.

 

cat /etc/backup.d/20.mysql

 

123456789101112131415161718192021222324252627282930313233343536
### backupninja MySQL config file ### # hotcopy = < yes | no > (default = no)# make a backup of the actual database binary files using mysqlhotcopy.hotcopy = no # sqldump = < yes | no > (default = no)# make a backup using mysqldump. this creates text files with sql commands# sufficient to recontruct the database.#sqldump = yes # sqldumpoptions = <options># (default = --lock-tables --complete-insert --add-drop-table --quick --quote-names)# arguments to pass to mysqldump# sqldumpoptions = --add-drop-table --quick --quote-names # compress = < yes | no > (default = yes)# if yes, compress the sqldump output.compress = yes # dbhost      = <host> (default = localhost)  # backupdir = <dir> (default: /var/backups/mysql)# where to dump the backups. hotcopy backups will be in a subdirectory# 'hotcopy' and sqldump backups will be in a subdirectory 'sqldump'backupdir = /backups/databases # databases = <all | db1 db2 db3 > (default = all)# which databases to backup. should either be the word 'all' or a# space separated list of database names.databases =  dbname dbusername = rootdbpassword = rootpwd

Файлы

Как я писал выше, мы копируем

  • Конфиги Apache
  • Конфиг Memcached
  • Конфиги MariaDB
  • Конфиги PHP
  • Корневую директорию сайта /var/www/html
cat /etc/backup.d/10.tar
1234567891011
when = everyday at 01backupname = innoter.combackupdir = /backups/files/configscompress = gzip includes =  /etc/httpd /etc/sysconfig/memcached /etc/my.cnf /etc/my.cnf.d /etc/php.ini /etc/php.dexcludes =  /tmp /proc /sys /dev /srv /media /misc /net /selinux # tar binary - have to be GNU tar#TAR=/bin/tar#DATE           /bin/date#DATEFORMAT     "%d.%m.%Y-%H.%M"

 

cat /etc/backup.d/11.tar
1234567891011
when = everyday at 01backupname = sitename.combackupdir = /backups/files/sitename.comcompress = gzip includes =  /var/www/htmlexcludes =  /tmp /proc /sys /dev /srv /media /misc /net /selinux # tar binary - have to be GNU tar#TAR=/bin/tar#DATE           /bin/date#DATEFORMAT     "%Y.%m.%d-%H%M"

Тестирование

Проверяем правильность конфигов.

backupninja -t

Запускаем копирование немедленно! Осторожно: это создаст хорошую нагрузку на сервер (в зависимости о того, что копируется, разумеется).

backupninja -n

Немного напильника

Стандартный скрипт для бекапа mysql сохраняет резвервную копию как $dumpdir/${db}.sql.gz или, если без сжатия,  $dumpdir/${db}.sql. Это как-то нелогично, потому что в этом случае каждая новая копия базы перезаписывает предыдущую!

Вначале скрипта добавляем переменную (можно шлёпнуть самой первой)

DATE=`date +%Y.%m.%d-%H%M`

и правим строки

1234
execstr="$VSERVER $vsname exec $DUMP | $GZIP $GZIP_OPTS > '$vroot$dumpdir/${db}.sql.gz'"execstr="$VSERVER $vsname exec $DUMP -r '$vroot$dumpdir/${db}.sql'"execstr="$DUMP | $GZIP $GZIP_OPTS > '$dumpdir/${db}.sql.gz'"execstr="$DUMP -r '$dumpdir/${db}.sql'"

на (соответственно)

1234
execstr="$VSERVER $vsname exec $DUMP | $GZIP $GZIP_OPTS > '$vroot$dumpdir/${db}-$DATE.sql.gz'"execstr="$VSERVER $vsname exec $DUMP -r '$vroot$dumpdir/${db}-$DATE.sql'"execstr="$DUMP | $GZIP $GZIP_OPTS > '$dumpdir/${db}-$DATE.sql.gz'"execstr="$DUMP -r '$dumpdir/${db}-$DATE.sql'"

После этого не забываем переименовать все кофиги заданий /etc/backup.d/*.sql в /etc/backup.d/*.sql-pl!

Проверяем конфиги.

backupninja -t

Видим, что backupninja их съела и запускаем тестовое копирование.

backupninja -n

Смотрим, что получили то, что хотели!

123
ls -lh /backups/databases/sqldump/total 4.3M-rw------- 1 root root 4.3M Aug 11 20:02 dbname-2014.08.11-2002.sql.gz

Удаляем старые копии

В данном случае мы настроили полное ежедневное копирование файлов и баз. Backupninja не умеет удалять старые бэкапы и вести ротацию, но ведь на то он и unixway, чтобы каждая утилита хорошо делала свою маленькую работу! Удалять старые файлы можно  и cron!

Я не буду писать об этом, потому что мой сервер мониторится системой  и я узнаю о том, что у меня осталось меньше 20% свободного места, а с учетом того, что на сервере 80ГБ дискового пространства, я успею почистить /backups прежде чем диск заполнится.

Кстати, в /etc/backupninja.conf есть параметр reportspace, который по-умолчанию отключен.

Бэкапов много не бывает! Не забывайте про них!

Добавить комментарий

Содержание этого поля является приватным и не предназначено для показа.

Plain text

  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.