Резервное копирование данных fsbackup

Встала перед мной задача бекапить конфиги продакшен сервера. Сначала решил было писать скрипт с использованием rar или tar, потом была идея использовать rsync , но так как бекапить нужно было на windows сервер, а аналоги под винду платные, то решил пройтись по портам и все же был найден нужный продукт - fsbackup. Довольно таки функциональная штуковина, и что удивило так это русские комментарии в конфиге. Утилита умеет делать бекапы не только файлов и папок, но и баз данных mysql. Готовые бекапы может залить на удаленный сервер по ftp или ssh, или просто создать их локально. В общем приступим.... Ставим из портов:

cd /usr/ports/sysutils/fsbackup
make install clean
Дальше перейдем к настройке... Создаем папку для бекапов: 
cd /usr/local/fsbackup
mkdir backup
 Создаем рабочий конфиг файл: 
cp cfg_example backup.conf
 Теперь отредактируем backup.sh. Укажем имя конфиг файла: 
ee create_backup.sh
config_files="backup.conf"
 Правим основной конфиг под свои нужды: 
# Example of configuration file.
# Пример файла конфигурации.
#
# http://www.opennet.ru/dev/fsbackup/
# Copyright (c) 2001 by Maxim Chirkov. 
#
#-------------------
# Name of backup, single word.
# Имя для бэкапа, строка состоящая из латинских букв, цифр и символа подчеркивания.
#-------------------
$cfg_backup_name = "zahostim_com";
#-------------------
# Path of internal cache directory for local backup method.
# Директория для помещения текущих хэшей для локального метода бэкапа, или
# временных хешей для других методов.
#-------------------
$cfg_cache_dir = "/usr/local/fsbackup/cache"; 
#-------------------
# Full path of some external program running from C.
# $prog_gzip = "" - not use compression, $prog_pgp = "" - not use encryption.
# Пути к запускаемым в процессе выполнения бэкапа программам. Рекомендуется 
# не полениться и прописать полный путь к каждой программе.
# Внимание ! При использовании шифрования через gpg, рекомендуется 
# установить значение $prog_gzip="", так как gpg перед шифрованием сжимает
# данные, использование gzip приведет к двойному сжатию и лишней нагрузке на CPU.
#-------------------
$prog_md5sum= "md5sum -b";
$prog_tar= "/usr/bin/tar";
$prog_ssh= "/usr/bin/ssh";
$prog_rm= "/bin/rm";
$prog_gzip= "/usr/bin/gzip"; # Если равно "", то не использовать сжатие.
$prog_pgp= "gpg";  # Если равно "", то не применять шифрование.
#-------------------
# Checksum method: 
#timesize - checksum of file attributes (default, best speed) 
#md5      - checksum of file attributes + MD5 checksum of file content.
# Метод вычисления контрольных сумм для определения изменений в файле.
#timesize - учитывается время последнего изменения файла, его размер,
#   атрибуты файла, но не учитывается содержимое. Как правило
#   учета данных факторов достаточно для определения необходимости
#   обновления файла в бэкапе. Наиболее быстрый метод.
#md5 - все параметры timesize + контрольная сумма содержимого
#   файла. Наиболее ресурсоемкий и медленный метод.
#-------------------
$cfg_checksum = "timesize"; 
#-------------------
# Backup style:
#backup    - incremental backup (copy only new and changed files).
#full_backup - full backup (copy all files).
#sync    - file tree synchronization.
#hash    - hash creation without storing archive (spying for new or changed files).
# Определение типа операции, вида бэкапа.
#backup      - инкрементальный бэкап в архив (т.е. копируются только 
#      изменившиеся с момента последнего бэкапа файлы)..
#full_backup - полный бэкап в архив, без хэша (т.е. всегда копируются 
#      все файлы).
#sync        - синхронизация дерева (только для типа хранилища ssh или local).
#hash    - только генерация хэша, без помещения файлов в архив
#      (пометка помещения файлов в бэкап, без физического перемещения)
#-------------------
$cfg_backup_style = "backup"; 
#-------------------
# Incremental level (after how many incremental copy make full refresh of backup)
# Число копий бэкапа, при инкрементальном бэкапе, после которых производится 
# полный бэкап. Например, при = 7 - 6 раз будут помещаться только изменения,
# на 7 раз бэкап будет объединен в один файл. 0 - сколько угодно раз.
#-------------------
$cfg_increment_level = 7; 
#-------------------
# Save previous backup to OLD directory before rotation or before storing 
# full backup.
# 0 - don't save old backup
# 1 - save old backup.
# Сохранение предыдущей версии полного бэкапа перед инкрементальной ротацией или 
# заменой текущего неинкрементального бэкапа новой версией.
# Старая версия помещается в подкаталог OLD.
# 0 - не сохранять предыдущую версию.
# 1 - сохранять предыдущую версию
#-------------------
$cfg_save_old_backup = 1;
#-------------------
# Type of backup storage:
#local    - store backup on local file system.
#remote_ssh - store backup on remote host over SSH connection.
#remote_ftp - store backup on remote FTP server.
# Тип хранилища для бэкапа. Описание см. в файле README.
#local    - хранение бэкапа в локальной файловой системе.
#remote_ssh - копирование бэкапа на удаленную машину с использованием SSH
#remote_ftp - копирование бэкапа на удаленную машину по FTP
#-------------------
$cfg_type = "local";
#-------------------
# Connection parameters for remote_ssh storage type.
# Параметры необходимые для копирования бэкапа через ssh и ftp:
#-------------------
$cfg_remote_host = "backup-server.test.ru";
$cfg_remote_login = "backup_login";
$cfg_remote_path = "/home/backup_login/backup";
#-------------------
# FTP transfer mode. If set to a non-zero value then all data transfers will 
# be done using passive mode. This is not usually required except for some dumb
# servers, and some firewall configurations.
# Режим соединения с FTP сервером (пассивный или активный).
# 0 - Active режим.
# 1 - Passive режим (для специфичных ftp серверов или особых настроек фаерволов).
#-------------------
$cfg_remote_ftp_mode = 0;
#-------------------
# Password of remote login for remote_ftp storage type.
# Параметры необходимые для копирования бэкапа по ftp:
#-------------------
$cfg_remote_password = "Test1234";
#-------------------
# Path of directory to store backup on local file system for local storage type.
# Параметры необходимые для хранения бэкапа на локальной ФС:
# Бэкап не должен быть в одной директории с кэшем. Создайте отдельную директорию, 
# например, archive.
#-------------------
$cfg_local_path = "/usr/local/fsbackup/archive";
#-------------------
# Limit of file creation time in days.
# If not 0, don't backup files created or modified later then $cfg_time_limit days.
# Время в днях, файлы созданные ранее которого не будут помещаться в бэкап. 
# 0 - помещаем все фалы независимо от времени их создания.
#-------------------
$cfg_time_limit = 0;
#-------------------
# Limit of maximum file size.
# If not 0, don't backup files witch size more then $cfg_time_limit kilobytes.
# Максимально допустимый размер файла в Kb для помещения в бэкап. 
# 0 - помещаем все фалы независимо от их размера.
#-------------------
$cfg_size_limit = 0;
#-------------------
# Size of maximum size (in KiloBytes) of single unpacked archive file (volume).
# 0 - unlimited file size.
# Максимальный размер (в Kb) несжатого архива с бэкапом, размещенного в одном 
# файле, т.е. размер тома. Полезно при создании гиганских архивов не влезающих 
# в ограничение файловой системы или при последующей записи архивов на CD-ROM 
# или другие накопители небольшого размера.
# При превышении заданного размера, запись продолжается в следующий файл c
# идентификатором '-2', '-3' и т.д.
# 0 - размер архива не ограничен.
#-------------------
$cfg_maximum_archive_size = 0;
#-------------------
# Root path for initial chdir.
# Корневая директория, относительно которой файлы помещаются в бэкап и 
# относительно которой описаны пути для помещения файлов.
#-------------------
$cfg_root_path = "/";
#-------------------
# Name of user in public key ring with public key will be used for PGP encryption.
# Not use encryption if not set.
# Шифрования бэкапа с помощью PGP.
# Если поле не заполнено, то pgp не применяется.
# Иначе поле содержит UserId записи в public key ring.
#-------------------
# $cfg_pgp_userid = "backup";
#-------------------
# Verbose level.
#0- Silent mode, suspend all output, except fatal configuration 
#  errors.
#1- Output errors and warnings.
#2- Output all the  available  data.
#
# Уровень "говорливости", регулирует объем выводимых программой сообщений.
#0 - Подавить вывод любых сообщений.
#       1 - Выводить сообщения об ошибках и предупреждения
#       2       - Выводить все сообщения
#-------------------
$cfg_verbose = 2;
#-------------------
# Recursive review of the prohibited directories.
#0- Recursively to view all contents of directories marked for 
#  backup, including contents of directories prohibited by 
#  '!', '!d' and '=! rules.
#1- not use a recursive entrance to directory prohibited for 
#                 backup (speed is increased, reduces flexibility of customization).
#
# Рекурсивный просмотр запрещенных директорий.
#0 - рекурсивно просматривать все содержимое директорий помеченных
# для бэкапа, в том числе и содержимое директорий запрещенных 
# правилами '!', '!d' и '=!'.
#       1 - не использовать рекурсивный вход в запрещенные для 
# бэкапа директории (увеличивается скорость бэкапа, уменьшает 
# гибкость настройки).
#-------------------
$cfg_stopdir_prune=0;
1;
#-------------------
# List of backuped path and regexp mask.
#  /dir[/file] - backup file or directory.
#  !/dir[/file] - NOT include this file or directory to backup.
#  # - ignore this line.
# Mask:
#  =~ - regexp mask for include file or directory to backup.
#  f~ - regexp file mask for include file to backup.
#  d~ - regexp directory mask for include directory to backup.
#  =! - regexp mask for NOT include file or directory to backup.
#  f! - regexp file mask for NOT include file to backup.
#  d! - regexp directory mask for NOT include directory to backup.
#
#
#
# Список файлов и условий для помещения в бэкап.
# (описываются после директивы __DATA__):
#  /dir[/file] - путь к файлу/директории для бэкапа.
#  !/dir[/file] - отрицание пути, не помещать в бэкап. Не маска, а реальный путь.
#  # - комментарий
# Маски:
#  =~ - маска для файла или директории, а не абсолютный путь. Первый или второй символ.
#  f~ - маска для файла. Первый или второй символ.
#  d~ - маска для директории. Первый или второй символ.
# Маски отрицания:
#  =! - "НЕ" маска для файла или директории, а не абсолютный путь. Первый или второй символ.
#  f! - "НЕ" маска для файла. Первый или второй символ.
#  d! - "НЕ" маска для директории. Первый или второй символ.
#
#
# Бэкап проходит только в рамках директорий и файлов описанных в путях.
# Отрицания путей имеют более высокий приоритет чем пути.
# Маски имеют более высокий приоритет, чем пути или отрицание путей, 
# маски "НЕ" имеют более высокий приоритет, чем обычные маски:
# 
#
# Таблица приоритетов:
# Operation priority:
#
#    1.=!
#    2.f!
#    3.f~
#    4.d!
#    5.=~
#    6.d~
#    7.!
#    8. path
#
#  Пример:
#  /usr/home# Объявляем /usr/home как пустой путь,
#  !/usr/home# для работы масок.
#  d~public_html
#  /var
#  d!var/log
#  f~netconf.log.*
#  
#  при этом только /usr/home/*/public_html будет добавлено в архив, 
#  а файлы директории /var/log/var/log/, за исключением messages, нет. 
#  Но, /usr/local/home/user/public_html добавлено в 
#  архив не будет ! Для поиска только по маскам нужно объявить:
#  /
#  !/
#  d~public_html
#  d~cgi-bin
#  d~/etc/
#-------------------
__DATA__ 
/usr/local/fsbackup
!/usr/local/fsbackup/cache
f!.core$
f!^core$
f!.o$
f!.log$
#d~public_html
#d!/log
#f~netconf.log.*
# Linux
/usr/src/linux/.config
# BSD
/var/db/pkg
/usr/src/sys/i386/conf
# Users
/home
/root
!/home/ftp
=!.netscape/cache/
=!.mozilla/.*/Cache/
=!.mozilla/.*/NewCache/
=!.mozilla/.*/News/
f!.*.avi$
f!.*.mpeg$
f!.*.mpg$
f!.*.mp3$
# System configuration
/etc
/var/cron/tabs
/var/spool/cron
/usr/local/etc
# Installed packages
/usr/local/bin
/usr/local/include
/usr/local/lib
/usr/local/libdata
/usr/local/libexec
/usr/local/sbin
/usr/local/share
/var/ucd-snmp
# Programs from source
/usr/local/apache/bin
/usr/local/apache/conf
/usr/local/apache/cgi-bin
/usr/local/apache/htdocs
/usr/local/apache/libexec
/usr/local/apache/src
/usr/local/www
/usr/local/mysql/bin
/usr/local/mysql/include
/usr/local/mysql/lib
/usr/local/mysql/libexec
/usr/local/mysql/var/mysql
/usr/local/pgsql/bin
/usr/local/pgsql/share
/usr/local/pgsql/lib
/usr/local/pgsql/include
/usr/local/pgsql/data
!/usr/local/pgsql/data/base
!/usr/local/pgsql/data/pg_xlog
/usr/local/squid/bin
/usr/local/squid/etc
/usr/local/news/etc
/usr/local/news/bin
/usr/local/news/lib
/usr/local/samba/bin
/usr/local/samba/lib
 Так как мне нужно было сливать бекапы по ftp то я правил следующие строки: 
# Тип хранилища для бэкапа
$cfg_type = "remote_ftp";
# Сервер FTP
$cfg_remote_host = "backup-server.test.ru";
# Логин FTP
$cfg_remote_login = "backup_login";
# Директория куда будут складываться бекапы
$cfg_remote_path = "/home/backup_login/backup";
# Режим соединения с FTP сервером (пассивный или активный).
$cfg_remote_ftp_mode = 0;
# Пароль FTP
$cfg_remote_password = "Test1234";
 Далее после __DATA__ Указываем директории который необходимо бекапить, я указал: 
/etc/ssh/
/etc/fstab
/etc/firewall.conf
/ect/ftpusers
/etc/group
/etc/hosts
/etc/make.conf
/etc/master.passwd
/etc/my.cnf
/etc/newsyslog.conf
/ect/passwd
/etc/pf.conf
/etc/rc.conf
/etc/resolv.conf
/etc/sysctl.conf
/etc/syslog.conf
/boot/loader.conf
/usr/local/etc/apache22
/usr/local/etc/exim
/usr/local/etc/nginx
/usr/local/etc/php
/usr/local/etc/zabbix
/usr/local/etc/dovecot.conf
/usr/local/etc/dovecot.passwd
/usr/local/etc/icecast.xml
/usr/local/etc/ices.conf
/usr/local/etc/ices1.conf
/usr/local/etc/php.ini
/usr/local/etc/proftpd.conf
/usr/local/etc/smartd.conf
/usr/local/fsbackup
/var/cron/tabs
Вы указываете свои... Дальше поговорим немного о бекап MySQL баз... Отредактируем mysql_backup.sh
ee /usr/local/fsbackup/scripts/mysql_backup.sh
Укажем логин и пароль пользователя mysql и так же какие БД бекапить:
# Метод бекапа
backup_method="db"
# Список баз которые необходимо бекапить (указывать через пробел)
backup_db_list="db1 db2 db3"
 И теперь нужно включить возможность бекапа MySQL в стартовом скрипте create_backup.sh
backup_mysql=1
 И чтобы все работало по расписанию, необходимо добавить в cron запись: 
/usr/local/fsbackup/create_backup.sh| mail -s"`uname -n` backup report" root
 Я у себя поставил выполнять каждый день в 4 утра ну, а вы на свое усмотрение... Так же в папке scriptrs присутствуют скрипты восстановления данных из бекапов, но так как задача стояла только бекапить, я пока с ними не разбирался, но краем глаза все таки глянул. За восстановление отвечает скрипт fsrestore.sh там немного нужно подредактировать пути и все замечательно будет работать. Делайте бекапы уважаемые читатели...!

  • Автор: WereWolf
  • Комментарии: 0
  • Просмотры: 4

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

Вы не авторизованы и вам запрещено писать комментарии. Для расширенных возможностей зарегистрируйтесь!