FreeBSD. Резервирование данных при помощи fsbackup
После истории с rm -rf / я озаботился всетаки каждодневным бэкапом данных, сначала планировал написть свой shell-скриптик, но потом всетаки решил поискать готовое решение...
Цель
- Резервное копирование файлов проектов
- Дамп базы данных проектов (MySQL)
- Выгрузка дампов на удаленный FTP сервер
Средства
В качестве средства для резвного копирования был выбран fsbackup, в силу того, что отвечал нашим целям.
Система fsbackup была создана для обеспечения резервного копирования серверов разного масштаба на специально отведенном сервере бэкапа.
Установка
cd /usr/ports/sysutils/fsbackup make install
Более подробно о работе с Портами и пакетами во FreeBSD, а так же о обновлении дерева портов и установленных пакетов.
Настройка
cd /usr/local/fsbackup
Создаем директорию для архивов
mkdir ./archive
Сделаем резервную копию и отредактируем конфигурационный файл
cp cfg_example server_backup.conf vi server_backup.conf
Там все просто, да еще и на русском :)
Теперь укажите используемый конфигурационный файл в create_backup.sh
config_files="server_backup.conf"
Настройки для FTP
Файл server_backup.conf
# Тип хранилища $cfg_type = "remote_ftp"; # Сервер на который будет копироваться бэкап. $cfg_remote_host = "server.remote.ru:21"; # Логин под которым будет сохранятся бэкап. $cfg_remote_login = "backup_login"; # Директория куда должны помещаться файлы бэкапа, директория должна присутствовать. $cfg_remote_path = "/home/backup_login/backup"; # пароль для входа по ftp. $cfg_remote_password = "backup_password";
Указываем директории и файлы для бэкапа
Доходим до $cfg_root_path и указываем корневую директорию, относительно которой описаны пути для помещения файлов (См. __DATA__).
Указываем директории и файлы для бэкапа (директива __DATA__)
__DATA__ # Fsbackup /usr/local/fsbackup !/usr/local/fsbackup/cache f!.core$ f!^core$ f!.o$ f!.log$ # BSD /var/db/pkg /usr/src/sys/i386/conf # Users and PROJECT's /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
MySQL бэкап
Для бэкапа MySQL надо отредактировать ./scripts/mysql_backup.sh
Указываем логин, пароль, указываем какие БД нам дампить.
А также необходимо отредактировать стартовый файл ./create_backup.sh и указать что нам нужен бэкап MySQL!
backup_mysql=1
Далее, добавляем в крон запись
crontab -e 0 4 * * * /usr/local/fsbackup/create_backup.sh| mail -s"`uname -n` backup report" root
Краткая справка по крону и шпаргалка.
Секурность!
По поводу шифрования бэкапа смотрите
Восстановление данных
Для полного восстановления данных из инкрементального бэкапа может использоваться скрипт ./scripts/fsrestore.sh, для восстановления просто отредактируйте пути внутри скрипта и запустите его.
Комментарии
rf -rf / ==> rm -rf /
Cпасибо, поправил!
а чем бэкапить NDBКластер? :)
Ну, во первых fsbackup делает mysqldump, может тем же самым и дампить?)
Как добавить число копий бэкапа в папке old?
А зачем вам OLD? Можете вообще от него отказаться.
$cfg_save_old_backup = 0;
Или по всей видимости надо переписывать скрипт...
Так ведь если я уберу old то тогда у меня будет только один бэкап сделанный прошлым днем и все. а мне хотелось бы что хотя бы бэкапов пять прошлых дней оставались. там к примеру 01.02.09 02.02.09 ...05.02.09 ну а уж потом 01.02.09 заменяется на 06.02.09 Такое как осуществить
Тут укажите сколько вы хотите промежуточных бекапов
$cfg_increment_level = 5;
$cfg_increment_level = 5;
Не работает. все прошлым днем.
Ну а сколько раз вы на дню делаете бекапов?
1 раз в день. То есть бэкап каждый день
При $cfg_increment_level = 5 и бекапе раз в сутки, у вас получится 5 промежуточных бекапов (инкрементных) за 5 дней.
Потом все эти промежуточные бекапы объединятся в один архив и поместятся в OLD.
Так? Более подробно опишите все пожалуйста.
adw0rd -
Совершенно верно!!!
Но хотелось бы чтобы просто делался ежедневный полный бэкап отдельной базой, Необходимо так
(а мне хотелось бы что хотя бы бэкапов пять прошлых дней оставались. там к примеру 01.02.09 02.02.09 …05.02.09 ну а уж потом 01.02.09 заменяется на 06.02.09 Такое как осуществить)
joni, если полный бекап, то делайте full_backup и просто в OLD будут все ваши каждодневные полные бекапы.
А потом от ненужных избавляйтесь если хотите, пару строк в sh и проблема решена...
Как делать бекап С Удалённого FTP-сервера ?
Александр, соединяться по ФТП и сливать каталоги, вроде fsbackup не предусмотрена к этому.
Кстати, рекомендую покопаться в сторону монтирования удаленного ФТП как ФС.
Я нашёл способ делать backup ftp:
wget -r ftp://user:pass@domain_name
adw0rd В олд ложится только один бэкам прошлого дня, хочу 5ть. как сделать?
Александр, да, тоже вариант, спасибо! :)
joni, думаю переписать скрипт... Вы читали ман http://www.opennet.ru/dev/fsbackup/ ?
конечно читал. но для меня переписать скрипт действительно сложно. похожих готовых решений нет?
joni, я не встечал... Можете как вариант попробовать Subversion, но там тоже надо будет писать какой-то контроллер для управления бекапом.
у меня при копирование выдает ошибку. WARNING: Nothing to backup.
при копировании "чего"?
уже разобрался спс
спасибо, друг. на мотанге наконецто переделал все нахнах :)
неплохая утилита в бекапе, надеюсь не увидим на что она способна при восстановлении :-! ..
плохо что нет версии для печати !!!
int, а что, фигово выглядит при печати? Я тут посмотрел "предварительный просмотр" в браузере... Если не распечатывать камменты - то нормально выглядит
Creating remote_ftp full_backup: all
Can't login to ftp server.
Хотя с указаными данными в конфиге create_backup.sh легко захожу на ftp:
$cfg_remote_host = "ftp.nextmail.ru:21";
$cfg_remote_login = "zaibizzz@nextmail.ru";
$cfg_remote_path = "/var/backup/fsbackup";
$cfg_remote_password = "*";
чего бы ето?
Единственное что меня смущает - ваш логин. Может надо только "zaibizzz" оставить?
Нет логин именно такой, проверено.Мне кажется что в срипте стоит короткое время ожидание ответа от сервера.А сервер кстати долго разчихляется.Может ето где то можно подправить
Возможно, но я не видел таких настроек. Видимо надо скрипты ковырять
Тогда еще вопросик.Мне нужно одновременно делать бекап и на локадьную машину, и на ftp. Как ето настроить, чтобы два раза не архивировалось все, а лиш один раз: сначала все забекапило, положоло в локальный каталог, апотом ето же передало по ftp ?
не знаю, я бы после выполнения скрипта сам запускал копирование по ftp/sftp (через свой скрипт)
Я что то не понял.
Что без переписания скрипт mysql_backup оно лить не будет на remote_ftp?
Просто по скрипту видно что оно жмет и на этом exit.=)
Он бекап БД кладет в /usr/local/fsbackup/archive
А потом все в куче отправляет в хранилище
Т.е. да, mysql_backup сам никуда ничего не отправляет, он только делает архив
Все я понял. спасибо.
Просто я указал только те папки которые нужно мне для бэйкапа. просто создал два скрипта один для системы другой для веб сервера.
а нужно было еще добавить /usr/local/fsbackup/archive
просто с начало происходит выполнение скриптов а потом main скрипта так сказать
это я так вдруг у кого то будет подобное=)
вот тут товарищ joni говорил что в папку old пишется только один бэкап. да это так.
мне нужно было тоже самое. для этого я закомментировал 4 строчки и папка OLD чиститься не будет.
строчки 462-465 в файле fsbackup.pl
написал комментарии что вообще эти строки делают
и теперь выставляем:
$cfg_backup_style = "backup";
сохранять копии. число промежуточных бэкапов 1.
если поставить $cfg_backup_style = "full_backup"; у меня получаются имена файлов backup-0.tar.gz тоесть он время не ставить а значит файл будет заменяться.
следующим комментарием найду как сделать что бы при full_backup ставилась дата.
Добрый день,коллеги! Настроил сие чудо,всё отлично работает, но есть проблема не бэкапит ко мне на ftp большое количество данных (120ГБ),точнее бэкапит,но срывается где-то на 25ГБ, в связи с этим начал искать лог программы дабы выяснить причину. Проблема как раз в том что не смог найти лога, где он хранится и создается ли вобще ? Заранее спасибо за ответ!
P.S. в ./var и /usr/local/fsbackup смотрел
Уважаемый Tommy, а вы случаем не разобрались еще с тем как сделать что бы при full_backup ставилась дата?
очень нужно! спасибо.
panser, символ @ нужно экранированть, должно получиться так test\@example.com :) сам только что пробовал, получилось :)
Мишка, а почему от написания собственного скрипта отказался?)
Да наверное не хотел тратить время, в этом и смысл использовать сторонний софт :)
А столько искал способ для бекапа сайтов... так и не нашел оптимальный и простой)), в итоге написал простой скрипт, пока работает норм, вот даже статью напаисал http://www.artcom-ufa.ru/posts/2011/07/12/rezervnoe-kopirovanie-na-veb-servere.
А чего fsbackup не использовал?
И для подобных строк:
надо использовать словари или кортежи/списки
ну тебе, как python программисту легко говорить ;-)
Creating full backup of all MySQL databases.
mysqldump: ambiguous option '--all' (all-databases, allow-keywords)
mysqldump: ambiguous option '--all' (all-databases, allow-keywords)
Creating remote_ftp backup: server1
Current increment number: 0
FTP error, Can't GET .hash
....ng /usr/local/fsbackup
done
....ng /var/db/pkg
done
....ng /usr/src/sys/i386/conf
done
....ng /etc
done
....ng /var/cron/tabs
done
....ng /var/spool/cron
done
....ng /usr/local/etc
done
....ng /usr/local/bin
done
....ng /usr/local/include
done
....ng /usr/local/lib
done
....ng /usr/local/libdata
done
....ng /usr/local/libexec
done
....ng /usr/local/sbin
done
....ng /usr/local/share
done
....ng /usr/local/etc/nginx
done
....ng /usr/local/etc/apache22
done
....ng /usr/local/www
done
....ng /usr/local/mysql/bin
done
....ng /usr/local/mysql/include
done
....ng /usr/local/mysql/lib
done
....ng /usr/local/mysql/libexec
done
....ng /usr/local/mysql/var/mysql
done
WARNING: Nothing to backup.
вот такая фигня. 3 тий день мучаюсь. помогите. OC FreeBSD 9.1
Какие версии ПО стоят? Выполните:
fsbackup-1.2.1_1 File system backup and synchronization utility
mysql-client-5.5.31 Multithreaded SQL database (client)
mysql-server-5.5.31 Multithreaded SQL database (server)
php53-mysql-5.3.24 The mysql shared extension for php
php53-mysqli-5.3.24 The mysqli shared extension for php
php53-pdo_mysql-5.3.24 The pdo_mysql shared extension for php
phpMyAdmin-4.0.0 A set of PHP-sсripts to manage MySQL over the web
проблему с созданием архивов решил. а вот mysqldump: ambiguous option '--all' (all-databases, allow-keywords)
mysqldump: ambiguous option '--all' (all-databases, allow-keywords)
осталась. помогите
Исправьте файл mysql_backup.sh, там есть секция:
Так вот, уберит "--all", так как эта опция не валидна. И так по всему файлу.
if [ "_$backup_method" = "_full" ]; then
echo "Creating full backup of all MySQL databases."
${backup_progdump_path}mysqldump --add-drop-table --all-databases --force --no-data $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-struct-mysql
${backup_progdump_path}mysqldump -databases --add-drop-table --force $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser |gzip > $backup_path/$backup_name-mysql.gz
exit
fi
так правильно?
create_backup.sh: ./sсripts/mysql_backup.sh: not found
Creating remote_ftp backup: server1
Current increment number: 1
backup_name="slimserver1"
backup_method="full"
backup_db_list="aspseek trash:cache_table1 trash:cache_table2 mnogosearch"
backup_mysqluser="мой логин"
backup_mysqlpassword="мой пароль"
backup_path="/usr/local/fsbackup/sys_backup"
backup_progdump_path="/usr/local/bin"
extra_mysqldump_flag="--complete-insert"
if [ -n "$backup_progdump_path" ]; then
backup_progdump_path="$backup_progdump_path/"
fi
if [ "_$backup_method" = "_full" ]; then
echo "Creating full backup of all MySQL databases."
${backup_progdump_path}mysqldump --add-drop-table --all-databases --force --no-data $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-struct-mysql
${backup_progdump_path}mysqldump -databases --add-drop-table --force $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser |gzip > $backup_path/$backup_name-mysql.gz
exit
fi
if [ "_$backup_method" = "_full" ]; then
echo "Creating full backup of all MySQL databases."
${backup_progdump_path}mysqldump --add-drop-table --all-databases --force --no-data $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-struct-mysql
${backup_progdump_path}mysqldump -databases --all --add-drop-table --force $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser |gzip > $backup_path/$backup_name-mysql.gz
exit
fi
if [ "_$backup_method" = "_notdb" ]; then
echo "Creating full backup of all MySQL databases except databases $backup_db_list."
${backup_progdump_path}mysqldump --all --add-drop-table --all-databases --force --no-data $extra_mysqldump_flag --password=$backup_mysqlpassword --user=$backup_mysqluser > $backup_path/$backup_name-struct-mysql
cat /dev/null > $backup_path/$backup_name-mysql
fi
echo "Configuration error. Not valid parameters in backup_method or backup_sqltype."
что нужно поправить?
Здравствуйте.
Бэкап по ФТП.
Есть следующая проблема: не создаётся директория OLD.
Если создаю вручную, ничего не пишется. Соответственно, бэкапы не складываются в OLD.
Ошибок на экране при запуске из консоли тоже нет.
Шелл у юзера есть. Из под него в консоли команды скрипта fsbackup.pl работают, прав хватает.
Остальные функции работают нормально.
FreeBSD 9.2-RELEASE-p1
Конфиг:
1;
__DATA__.
/bin
/boot
/etc
/home
/lib
Помогите.
Благодарю.
@Сергей Бондарь, 8 лет уже не использовал fsbackup, сложно сказать что за проблема
Оставьте свой комментарий