Backup-manager — настройка резервного копирования Linux-сервера на Amazon S3 за 5 минут

Submitted by Ромка on Сб, 13/03/2010 - 18:45

Ромка аватар

Настраиваю сейчас под свои веб-девелоперские нужды сервер на основе Debian lenny и когда дошел до настройки резервного копирования данных стало понятно, что задача эта хоть и простая, но очень уж муторная: нужно написать и отладить скрипты, которые будут архивировать нужные папки (причем желательно делать инкрементальные архивы), базы данных, хранилища subversion, а затем переносить эти архивы на удаленный сервер. Задача в общем-то посильная для любого опытного программиста, но минимум день-два написание этих скриптов отнимет.

Очень удачной находкой для решения этой задачи стал backup-manager — это бесплатный набор bash-скриптов, позволяющих:

  • архивировать любые папки, в том числе и создавать инкрементальные архивы. В конфиге просто указывается список директорий, которые должны быть скопированы, а также "черный список" файлов, которые копироваться не будут.
  • делать резервное копирование баз данных MySQL. В конфиге указываются логин и пароль mysql-юзера, имеющего доступ к базам, а всю остальную работу backup-manager делает сам.
  • делать резервное копирование svn-репозиториев, причем бэкап делается не копированием папки с хранилищем, а с помощью команды svnadmin dump.
  • копировать созданные архивы на удаленные сервера по FTP, SSH или (это самая важная для меня фича) в хранилище Amazon S3, а также записывать их на DVD.

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

Правда запустить копирование архивов на Amazon S3 с ходу не получилось, описание и решение возникших трудностей под катом.

При попытке скопировать данные в хранилище Amazon S3 backup-manager падал с ошибкой типа:

  1. Error reported by backup-manager-upload for method "s3", check "/tmp/bmu-log.kRZndC"

В свою очередь в файле /tmp/bmu-log.kRZndC лежало абсолютно неинформативное сообщение:

  1. The upload transfer "s3" failed.

Но вот в syslog записывались более полезные сообщения:

  1. Mar 12 16:12:26 dom7 backup-manager[26326]: info * Using the upload method "S3".
  2. Mar 12 16:12:26 dom7 backup-manager-upload[28932]: info * Trying to upload files to s3 service - main::verbose (/usr/bin/backup-manager-upload l. 1000)
  3. Mar 12 16:12:26 dom7 backup-manager-upload[28932]: error * Net::Amazon::S3 is not available, cannot use S3 service : Can't locate Net/Amazon/S3.pm in @INC (@INC contains: /etc/per$
  4. Mar 12 16:12:26 dom7 backup-manager-upload[28932]: error * The upload transfer "s3" failed. - main::verbose_error (/usr/bin/backup-manager-upload l. 1007)
  5. Mar 12 16:12:26 dom7 backup-manager[26326]: error * Error reported by backup-manager-upload for method "s3", check "/tmp/bmu-log.kRZndC".
  6. Mar 12 16:12:26 dom7 backup-manager[26326]: debug * DEBUG: exec_post_command()
  7. Mar 12 16:12:26 dom7 backup-manager[26326]: info * Releasing lock
  8. Mar 12 16:12:26 dom7 backup-manager[26326]: debug * DEBUG: release_lock()

Эти ошибки были устранены после установки пакета libnet-amazon-s3-perl, но копирование на S3 опять работать не захотело, теперь уже с такими сообщениями об ошибках:

  1. Mar 12 16:35:45 dom7 backup-manager[4800]: info * Using the upload method "S3".
  2. Mar 12 16:35:45 dom7 backup-manager-upload[7272]: info * Trying to upload files to s3 service - main::verbose (/usr/bin/backup-manager-upload l. 1000)
  3. Mar 12 16:35:45 dom7 backup-manager-upload[7272]: error * File::Slurp is not available, cannot use S3 service - main::send_files_with_s3 (/usr/bin/backup-manager-upload l. 1001)
  4. Mar 12 16:35:45 dom7 backup-manager-upload[7272]: error * The upload transfer "s3" failed. - main::verbose_error (/usr/bin/backup-manager-upload l. 1007)
  5. Mar 12 16:35:45 dom7 backup-manager[4800]: error * Error reported by backup-manager-upload for method "s3", check "/tmp/bmu-log.uOcYNB".
  6. Mar 12 16:35:45 dom7 backup-manager[4800]: debug * DEBUG: exec_post_command()
  7. Mar 12 16:35:45 dom7 backup-manager[4800]: info * Releasing lock
  8. Mar 12 16:35:45 dom7 backup-manager[4800]: debug * DEBUG: release_lock()

После установки пакета libfile-slurp-perl пропали и эти ошибки и данные стали корректно копироваться на S3. Ура! Теперь остается добавить запуск бэкап менеджера в cron и можно спать спокойно :)

19 Comments

Ромка wrote:...архивировать

[quote=Ромка]...архивировать любые папки, в том числе и создавать инкрементальные архивы. В конфиге просто указывается список директорий...[/quote]
В Linux нет папок, а есть каталоги (directories), ибо каталог -- такая же запись, как и файл. Папки -- это от лукавого (Билла Гейтса).

я вот решил попробывать

я вот решил попробывать сначала локально протестить как он работает? потом есть виды делать бэкап сервака на свою тачку, но млин затык установил бакап манагер настроил конфиг(пока тока под локальный тест) а как его запускать чтоб делал бэкап? как его засунуть в крон чтоб бэкапил каждую неделю в пятницу?

крон

некропост, но все же, кому то может поможет
на редхатных линуксах, при установке из репозитория, крон-скрипт записывается в:
/etc/cron.daily/backup-manager.cron
чтобы он запускался, нужно в конфиге разрешить запуск:
export BM_DAILY_CRON="true"

и тестится собственно ручным запуском скрипта

Не копирует на s3

А может кто знает, у меня начинает копировать и прерывается с ошибкой

:1: parser error : Start tag expected, '<' not found
500 read failed: Соединение сброшено другой сторон
^ at /usr/share/perl5/Net/Amazon/S3.pm line 782

Ставил из портов, система Debian Lenny

Не копирует на s3

Проблема в принципе обозначилась, решается

  1. sudo apt-get install libperl6-slurp-perl libxml2-dev
  2. sudo cpan XML::LibXML
  3. sudo cpan Net::Amazon::S3

но теперь новая, проблема с DateTime::Locale::Base
пишет out of memory, бум разбираться :)
Хотя конечно это не есть хорошо, будаю надо искать более изящное решение, либо писать свое

Отлично!

Юникод или Уникод (англ. Unicode) — стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков. Стандарт предложен в 1991 году некоммерческой организацией «Консорциум Юникода» (англ. Unicode Consortium, Unicode Inc.). Применение этого стандарта позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы, при этом становится ненужным переключение кодовых страниц. Стандарт состоит из двух основных разделов: универсальный набор символов (англ. UCS, universal character set) и семейство кодировок (англ. UTF, Unicode transformation format). Универсальный набор символов задаёт однозначное соответствие символов кодам — элементам кодового пространства, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление последовательности кодов UCS.

Резервное копирование на веб-сервере

Я тоже долго пытался найти решение для бекапа своих проектов, чего только я не попробовал, в итоге скрипт наваял - простой)) даже вот тут http://www.artcom-ufa.ru/posts/2011/07/12/rezervnoe-kopirovanie-na-veb-servere статью написал, чтобы не забыть если вдруг.

Как восстановить данные из бекапа ???

Как восстановить данные из бекапа ???
например полностью или только указанный путь, или за определенную дату (он ведь поддерживает инкрементальность) .

об этом нет ни слова в документации, конфиг файле и в вашей статье.
или вас это совсем не заботит ? :)

пытаюсь найти хоть что-то погуглив но находятся скрипты однофамильцы а по делу ничего...