Как стать автором
Обновить

Комментарии 39

Я бы только значение date '+%Y-%m-%d' запрашивал один раз держал бы в переменной. А то будут странные косяки если скрипт начнет выполняться за несколько секунд до полуночи.
Согласен, сейчас переделаю.
интересно, а есть сервис, который позволяет коллективно редактировать текстовой файл? в нашем случае этот скрипт.

вики и svn/cvs/git/hg в этом плане не рассматриваю. Интересует именно web
гуглдок
А wiki не web?
а скрипт что бы все это дело разворачивал на новом сервере?
Это я предпочитаю ручками.
Знаете, а я на следующей неделе опубликую 2 скрипта.
один на Bash — бэкапит БД на удаленны фтп, бэкапит директории с сайтами.
второй на php — удаляет с фтп устаревшие бэкапы.

ключевой момент — бэкапы хранятся не на локальном сервере.

поднять vps под убунтой могу за 30 минут. для себя подготовил мини инструкцию что и где нужно прописать и что установить =)
Я что то подобное писал, только не по ftp, а mount через ssh. Работало нормально, но ведь мог не ответить удаленный сервер.

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

за месяц ежедневных бэкапов набирается на 15-20 гигов.
Если ftp в защищеной сети, то проблем нет, конечно. Но если это публичный интернет, то есть смысл посмотреть в сторону scp (копирование через ssh).
scp не только лучше защищено, но даже будет немного проще скриптовать. С scp/ssh можно делать интересные штуки, как например, компрессия-архивация на удаленном хосте если локальное процессорное время ценнее трафика. И прочее в таком стиле.
Я видимо не выдержу и опубликую решение на duplicity… разнообразие велосипедов поражает.
Это угроза?!
Я бы посоветовал добавить заливку бэкапа на amazon s3

s3cmd put $DATE-files-$PREFIX.tar.bz2 s3://backup/

Настройка программы тоже очень простая habrahabr.ru/blogs/personal/92419/
Можно еще бекапить бд сразу в архив.
mysqldump -uuser -ppass dbase | gzip -cf9 > dbase_date.sql.gz
А потом опять зажимать в другой архив? Или таскать папкой с архивами?

Мне кажется удобнее архив сразу директории в один файл.
Не понимаю, вы имеете ввиду упаковывать дамп и файлы в один архив?
Все базы дампятся в файлы. Одна БД — один файл. Все это лежит во временной директории. Потом она сжимается (соответственно, сжимаются сразу все дампы) в один файл.

Отдельно сжимаются нужные файлы (веб сайты, настройки)

Получается в итоге скрипта 2 архива — в одном все файлы, в другом все базы данных. Удобно хранить и копировать.
Да, конечно такой подход тоже может быть.
Я наоборот для каждого проекта завожу отдельную папку, в нее кладу папку с дампами бд и папку с архивами статики.
Каждый проект в своей папке, потому как не известно кому будет передан проект в дальнейшем, куда переедет проект в дальнейшем, будет ли он существовать вообще.
Оговорился, архивы я не использую, пытался наложить ваши потребности на свой пример и запутался. У меня хардлинки в папку дропбокса, и только статика.
Бекап в архив — позапрошлый век. Нужно делать инкрементальные бекапы с хардлинками на неизменившиеся файлы.
Я тоже склоняюсь к этому мнению, но для небольших проектов достаточно и бекапа с архивами. Точнее архивы тоже не хорошо, на мой взгляд достаточно хардлинков или копирования с заменой, скажем, в папке дропбокса.
Речь идет о статике конечно же, исходный код в архивах — точно прошлый век.
добавьте
echo "Backup postgresql bases"
if [ -x `which pg_dumpall`]; then
su - postgres -c "pg_dumpall" >......
fi
Используйте вместо mysqldump — innobackupex/xtrabackup
Что это? В репозитории Ubuntu нет такого.

Мой скрипт и на shared хостинге работать будет, ему права root не нужны.
Tar и mysqldump есть везде.
конечно это не для шаред, но и в заголовке указано — VPS
www.percona.com/docs/wiki/repositories:apt
А что, если vps — то надо ставить на него все подряд?

Расскажите, какие выгоды дает innobackupex/xtrabackup по сравнению с mysqldump?
скорость бекапа + ниже нагрузка на систему + быстрое восстановление.
вкратце: эти скрипты не делают дамп запросами в базу и не восстанавливают таким же образом.
для деталей — гугл в помощь.
Используй %programname%!
Для деталей — гугл в помощь.

Спасибо, я как нибудь по старинке. К тому же, не понятно, можно ли будет эти дампы через phmyadmin восстановить.
Мда… у бывших пользователей клодо мысли сходятся… Как раз собралась написать похожую штуку, только с rsync'ом на домашний комп и архивированием уже «дома» + перелив с домашнего компа на амазон через s3cmd. И тоже наладила все это безобразие «в связи с событиями у Clodo» :-)
На клодовской машинке бэкапы делались скриптами халявной панельки, у селектела пришлось все настроить ручками :-)
Селектел мне очень пока нравится. Скорость фантастическая, глюков нет, а деньгам так же. Посмотрим, как будет дальше по времени.
Поставил на сервер dropbox и бэкаплю сразу туда.
rsnapshot чем не угодил? У меня бекапит и базы и файлы…
Если есть простой, прозрачный и удобный инструмент, который ежедневно просто делает свою работу на нескольких серверах — нафига его менять?

Кстати, меня смущает там 41 открытый вопрос.

Уверены, что нужно использовать этого монстра, вместо простого скрипта в 30 строк?
41 открытый вопрос — это лишь показатель популярности проекта. Software fails.

Недостаток простых скриптов в том, что рано или поздно их приходится дописывать / делать костыли. К примеру, если захотите бэкапится на S3 вместо диска, либо захотите делать бэкапы инкрементально. Я раньше тоже пользовался самописным скриптиком вроде вашего, но понял, что использовать его для сложных проектов стало неудобно из-за того, что в некоторых местах бэкапить нужно не только файлы/БД.
К примеру, если захотите бэкапится на S3 вместо диска, либо захотите делать бэкапы инкрементально

Лично мне нравится делать полные копии. Для версионности своих разработок использую Github. Для S3 есть s3cmd — простая консольная утилита.

Вообще, учитывая как щас раздают облачные гигабайты нахаляву — бэкапиться можно в 3 места сразу, и мне это в любом случае удобнее делать маленьким скриптиком.

что в некоторых местах бэкапить нужно не только файлы/БД

Прошу прощения, а что можно еще бэкапить?
Это понятно, что для всего есть своя консольная утилита. Разница в том, что в вашем скрипте эту консольную утилиту нужно правильно использовать, да ещё и тщательно это простестировать. А если в один прекрасный день сторонний сервис, на который заливаются ваши бэкапы откажет / истечёт срок действия сертификата / закончатся деньги в аккаунте? Гем backup умеет отправлять письма на почту со статусом последнего бэкапа.

Кроме того, в вашем скрипте нет обработки кодов возврата. А ведь каждая команда в цепочке может выполнится неуспешно (ошибка доступа, закончилось место на диске, MySQL timeout).

Я не совсем правильно выразился по поводу возможных предметов бэкапа. Бэкапятся, в любом случае, только файлы. Более или менее нагруженный проект это не только LAMP. У нас в проекте, например, есть Redis. Он периодически сохраняет свою базу в файл. Перед тем как копировать эту базу для бэкапа, нужно отправить специальную команду для того, чтобы Redis записал информацию на диск. Понятно, что это тоже можно реализовать с помощью bash-скрипта, но зачем изрбретать велосипед, если это уже сделали правильно за тебя и нужно лишь указать путь к папке Redis в конфиге? Чем сложнее проект, тем больше велосипедов придётся изобретать.
Да как скажете.
Ничего не понимаю в серверах, бекапах и bash, но это единственный скрипт, который работает так, как нужно — с бекапом всех баз, с указанием исключений, с указанием целевых папок и удалением старых бекапов. Добавил загрузку в Google Cloud Storage и повесил на cron. На все настройки 15 минут, с учетом того, что я в этом полный ноль.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации