В отличие от многих веб-студий, наша невероятно ответственно относится к своей работе. Мы не делаем сайты, как в школе проходят экзамены - сдал и забыл. Наоборот, мы стараемся обеспечить каждому сданному проекту прочный фундамент и безоблачное будущее, даже если это никак не прописано в договоре.
Постановка задачи
Одна из проблем, с которой сталкиваются все люди информационного века, это проблема потери информации. От том, как обеспечить надежный бэкап личных данных с флэшки или локального компьютера я уже рассказывал в статье "Параноидальный бэкап". Теперь мы приняли решение выделить время и внедрить систему бэкапов повышенной надежности для всех своих многочисленных сайтов, а также сайтов наших клиентов.
Современный сайт обычно состоит из двух принципиально разных сущностей - файлов и базы данных. Создание полного бэкапа сайта подразумевает создание резервной копии их обеих. По-настоящему надежная система бэкапа, разумеется, должна хранить созданные резервные копии на другом физическом носителе, т.е. копии должны находиться на другом сервере, у другого хостинг-провайдера.
Про резервирование файлов мы расскажем как-нибудь в другой раз, а в сегодняшней статье речь пойдет о создании бэкапов баз данных MySQL. Бэкап базы делается путем создания так называемого дампа - текстового файла, по которому возможно полностью восстановить структуру и содержание базы. Так как задачу резервирования файлов мы считаем уже решенной, то автоматизация бэкапирования базы данных сводится к настройке:
- регулярного создания свежих дампов БД;
- автоматического удаления созданных ранее устаревших дампов;
- единого "пульта управления" процессами бэкапов многих сайтов.
Исследование вопроса: Sypex Dumper 2.0.6
Все знают, что Sypex Dumper - это лучшее решение для создания дампов баз данных MySQL. Во второй версии появилась поддержка всего, что необходимо для автоматизации: поддержка запуска из командной строки и, следовательно, из планировщика CRON; автоудаление лишних дампов. Все это появилось в версии 2.0.6, которая и оказалась самой свежей на момент исследования вопроса.
К сожалению, от использования 2.0.6 пришлось отказаться по двум причинам:
- во-первых, версии 2.x.x еще довольно нестабильны, поэтому на некоторых хостингах с ее работой возникают проблемы. На nic.ru, например, где хостится много наших клиентов, возникает проблема, описанная и решенная тут , однако решение требует модификации исходного кода скрипта, которое на момент исследования вопроса не было акцептировано разработчиком. Это, конечно, не катастрофа, но не очень хорошо: после внедрения системы необходимо следить за обновлениями до тех пор, пока проблема не будет решена официально.
- во-вторых, в версии 2.0.6 внедрена поддержка командной строки, однако нет поддержки получения параметров методом GET из адресной строки. Что это значит? Это значит, что запуск Sypex Dumper можно автоматизировать только с того сервера, на котором он расположен, используя CRON и запуская скрипт через интерпретатор командной строки PHP. Все это очень хорошо, если вы собираетесь настроить бэкап только один раз на своем сайте (хотя, к слову, с наскоку на nic.ru у меня планировщик не заработал, несмотря на полное соответствие FAQ и примеру с форума), но не очень удобно при настройке бэкапов большой группы сайтов на разных хостингах. Для каждого нового хостинга придется маяться с настройками командной строки CRON, путем к интерпретатору и т.д. Таким образом, внедрение системы будет довольно дорогим по трудозатратам удовольствием.
Полагаю, что автор Sypex Dumper отказывается от поддержки метода GET из весьма справедливых соображений безопасности, однако в предложенной методике этот момент учтен. Помещая дампер в директорию со случайным именем, мы исключаем возможность получения доступа к нему извне, если только злоумышленник уже не получил доступ к файловой системы сайта, либо не выкрал адрес с нашего управляющего сервера. Первое возможно, когда сайт и так уже взломан, второе - пренебрежимо маловероятно. Однако, бесспорно, потенциальная дырка в безопасности при использовании метода GET имеет место, так что в будущем метод должен быть заменен. Навскидку, можно научить Sypex Dumper брать параметры с "управляющего" сервера в зашифрованном виде.
Решение задачи: Sypex Dumper 1.0.8
Так или иначе, но от использования версии 2.0.6 пришлось отказаться в пользу более стабильного и проверенного решения, а именно версии 1.0.8, вернее ее модификации, а еще вернее модификации ее модификации. Отправной точкой стала редакция neochief'а , в которой стандартная функциональность Sypex Dumper'a была заменена возможностью принимать параметры и исполнять скрипт получив параметры методом GET из адресной строки.
Далее, мне хотелось добавить возможность автоудаления лишних дампов, чтобы они не скапливались бесконечно. Конечно, это легко реализовать через CRON текущего сервера, однако хотелось оставить возможность полностью удаленного запуска без каких-либо локальных настроек. Поэтому я написал небольшой самостоятельный php-скриптик PhPh_BackupAutodeleter.php без прямой привязки к Sypex Dumper, однако с возможностью его подключения к оному в качестве плагина. Скрипт производит удаление всех файлов типа *.sql или *.gz, кроме трех последних по имени. Бэкапы, созданные в Sypex Dumper, именуются строго последовательно, так что именно три самых свежих файла будут оставлены. Количество дампов, которые скрипт будет "оставлять в живых" можно жестко изменить в настройках скрипта, либо передать через адресную строку.
Наконец, новый SypexDumper 1.0.8 с поддержкой автоматизации через CRON содержит включение PhPh BackupAutodeleter и небольшой мод html-макета, выводящий результат выполнения процедуры автоудаления в основном окне с отчетом о выполненном бэкапе. И вы можете скачать его прямо сейчас.
Оставить комментарий