Как лучше организовать удаленный бэкап Linux сервера на удаленный FTP?

Здравствуйте. Посоветуйте пожалуйста, чем воспользоваться для удаленного бэкапа данных сервера.
Хочется чтобы было примерно так. Есть машина на линуксе каком то(например CentOs), на которую я захожу через обычный http. Там вылезает страничка, с формой, в которую можно добавить какое то количество серверов. Нажимаем "окей" и он сохраняет данные сервера, после этого раз в определенный период залезает на эти сервера и делает бэкап базы и файликов. После чего сохраняет бэкапы у себя или заливает их на FTP какой-нибудь.
  • Вопрос задан
  • 7738 просмотров
Пригласить эксперта
Ответы на вопрос 6
mrdubz
@mrdubz
front end developer
я джва года жду такое решение
Ответ написан
Комментировать
@v_prom
эм, а не проще кинуть скрипт, который будет делать бекап и переливать его на на нужный ftp? это быстрее и не нужно писать что-то на php каком-нибудь и веб-сервер поднимать не надо.
Ответ написан
@niocncn Автор вопроса
Хотелось бы, чтобы был некий вэб-интерфейс. В форму вводишь данные, PHP скрипт сохраняет данные нового сервера в какой то фалик что ли... Думаю, добавить скрипт в cron, а в него подставлять данные сервера. Только, как это лучше сделать? Вот нашел скриптик, который почти полностью удовлетворяет моим требованиям.
#!/bin/sh

# задаем переменную DATE. Она будет содержать текущую дату.

DATE=`date +%Y-%m-%d_%H-%M-%S`

# задаем переменную содержащую путь к каталогу с бэкапами.

DIR=/home/backups/

# переходим в каталог, где должны храниться бэкапы.

cd $DIR 

# создаем дамп всей базы данных MySQL под пользователем root и сжимаем дамп.

mysqldump -uroot -hlocalhost -p'Пароль рута к БД' -A | gzip -c > mysql_all_db_$DATE.gz

# создаем tar сжатый контейнер. Т.е. архивируем каталог www. В каталоге www хранятся все мои сайты.

tar -czf home_$DATE.tar.gz -P /home/www

# дополнительный параметр -P заперщает архиватору отбрасывать корневой '/'.

# Аналогичным образом архивируем конфигурационные файлы системы, необходимые для быстрого развертывания
# сервера из бэкапа. 
# каталог httpd, nginx и т.д. Все файлы будут добавлены в архив с сохранением путей.

tar -czf configs_$DATE.tar.gz -P /etc/openvpn /etc/httpd /etc/nginx /etc/my.cnf /etc/php.ini /etc/logrotate.conf /etc/sysconfig/iptables /etc/sysconfig/clock  /var/spool/cron

# Копируем наши файлы архивов на удаленный сервер с применением
# <a href="/articles/users/generacziya-klyuchej-dlya-besparolnogo-vxoda.html"><strong>авторизации по ключу</strong></a>.
# Ключ -i говорит программе scp о том, что для идентификации используется файл "for_scp",
# который я <a href="/articles/users/generacziya-klyuchej-dlya-besparolnogo-vxoda.html">генерировал</a> ранее.

scp -B -i /root/.ssh/for_scp /home/backups/mysql_all_db_$DATE.gz user@server.ru:~/backups_linux26.ru
scp -B -i /root/.ssh/for_scp /home/backups/configs_$DATE.tar.gz user@server.ru:~/backups_linux26.ru
scp -B -i /root/.ssh/for_scp /home/backups/home_$DATE.tar.gz user@server.ru:~/backups_linux26.ru

# удаляем 2 дневные копии архивов

find /home/backups/ -name "*.gz" -mtime 2 -exec rm -f {} \;


# инициализируем переменную freemaemory, задав ей значение процентного использования жесткого диска

freemaemory="$(df -h | grep "5.7" | awk '{ print $4 }')";

# grep "5.7" - фильтрую вывод по размеру своего жесткого диска.
# У Вас будет другое значение. Узнать размер жесткого диска можно командой df -h


# Ну и для информирования я отправляю сообщение себе на почту письмо с сообщением, о том, что натворил.
# Ключ -e позволяет echo использовать спец теги, такие как \n (перенос строки) в данном примере.



echo -e "Создание резервной копии сервера linux26.ru успешно завершено "`date`"\n\nСозданы следующие архивы:\nmysql_all_db_"$DATE".gz - Дамп базы данных\nhome_"$DATE".tar.gz - Архив web директории\nconfigs_"$DATE".tar.gz - Архив основных конфигурационных файлов системы.\n\nАрхивы отправлены на удаленный сервер.\n\n2-дневные архивы удалены.\n\nЗанято "$freemaemory" дискового пространства" | mail -s "Backup on linux26.ru complate" mail@domain.com


Взято с linux26.ru

Только здесь для одного сервера, а мне нужно сохранять данные нескольких.
Ответ написан
akubintsev
@akubintsev
Опытный backend разработчик
"залезает на эти сервера и делает бэкап базы и файликов."

Совершенно неправильное решение.
Бекапы должны делаться по крону "на месте". Более того, для гарантии целостности "базы и файликов" лучшее решение это использовать LVM разделы и делать с них снепшоты, которые потом легко архивировать и отсылать куда нужно.
Ответ написан
merryjane
@merryjane
Системный администратор
Если у вас только сервера (то-есть возможность поставить любой софт), можно посмотреть в сторону готовых решений с центровой нодой. Например, bacula. К ней есть и GUI-клиенты и web-морды.

Но про скриптики на серверах вам не зря советовали. Если запуск задачи инициируется на клиенте (например по cron), то можно сделать, чтобы хранились локальные копии бекапов. Это удобно, если происходят проблемы в сети, то-есть локальный бекап будет лежать 100%, а вот по сети он может недолиться из-за каких-либо проблем. Тоже самое касается и центровой ноды, если она не достучится до вашего сервера-клиента у вас не будет актуального бекапа. А если скрипт отработает локально на клиенте, и потом не достучится до сервера бекапов, то потеряется только копия на сервере бекапов, локальная копия же будет лежать на своем месте.
Ответ написан
D1abloRUS
@D1abloRUS
посомтрите на backuppc.sourceforge.net
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы