Расскажу как у меня устроено резервное копирование, может кому-то пригодится. Понятно что я в этой области ничего принципиально нового не скажу и скорей всего я изобрёл велосипед, но мой велосипед вроде более продвинутый, чем например вот этот. :) Для начала я делаю так, чтобы на сервере все нужные для архивации файлы были внутри домашней директории одного юзера, чтобы их не приходилось выкапывать по всему диску. То что невозможно туда перенести, например настройки крона – перед сохранением просто скидываются в файл и этот файл копируется в нужную директорию, примерно вот так: crontab -l > /home/user/settings/crontab.conf. Тоже самое делается со всеми нужными файлами о которых можно вспомнить, само копирование записывается в батник, который и будет работать бэкап-утилитой. Если вы что-то забудете, это не страшно, лучше забыть 1%, но сохранить 99, чем ничего не делать и в итоге потерять вообще всё. Полезный совет насчёт батника: если вы пишете на PHP, но при этом отнюдь не линуксоид, скрипт для архивации тоже можно написать на PHP, хуже он от этого не станет, а упираться в изучение тонкостей юниксового шелла ради бэкапа нет смысла. Итак, все данные собраны вместе, теперь архивируем их обычным zip’ом: zip -r filename * -x@exclude.lst. Тут самое интересное находится внутри файла exclude.lst – туда надо прописать всё, что не должно архивироваться, например временные файлы, логи и файлы которые будут архивироваться отдельно. Файл советую переименовать по текущей дате, например server1-20071001.zip, чтобы потом знать что в нём. Итак, у нас имеется архив со всем нужным для быстрого восстановления сервера, но он находится на том же сервере, то есть пока в качесвте бэкапа бесполезен. Для этого нужно его либо перенести на другой сервер, либо воспользоваться каким-то сторонним сервисом файлохранения.
Для быстрого переноса файлов между серверами подходит совсем даже не ftp, как наверняка будут советовать любители vi, а rsync (man rsync). В идеале ваш скрипт должен создать архив каждого сервера на каждом сервере, чтобы потом можно было восстановить конфигурацию и данные любого сервер при выходе его из строя. В качестве стороннего файлохранилища я пробую использовать Amazon S3 – “бесконечное” дисковое пространство от Амазона, плюс утилиту Jungle Disk, которая как раз с этим самым S3 работает, причём как под виндой, так и под линуксом.

Для сохранения мускульных баз данных я использую некий MySQL Backup Script. Вроде он достаточно надёжен, работает лучше чем например бэкап в phpMyAdmin, который может например не закачатся назад потому что окажется слишком длинным или не в той кодировке.

Напоследок расскажу одну байку, про то как не нужно делать резервное копирование. Работал я как-то в одной фирме, где вроде бы резервирование было устроено серьёзно, каждый день со всех дисков скидывался бэкап, дальше всё это отправлялось в специальную контору, которая записывала бэкап на кассеты и хранила в какой-то горе в секретной шахте. Приколы начинались, когда этим всем нужно было воспользоваться в обратную сторону. Если нужный файл оказывался на кассете уже вынутой из стриммера и положенной в шахту на полочку, то за то чтобы снять кассету с полки и поставить в сервер, с фирмы брали $150 (это в дополнение к миллионому контракту на обслуживание). :) Так что тут Амазон выглядит как явный прогресс и шаг вперёд.

Похожие посты