Восстановление
сайта

Верну сайт к работе после сбоя, неудачного обновления или из резервной копии. Восстановлю даже без бэкапа, если это возможно, найду причину падения и проверю, что заказы, формы и каталог снова работают. Битрикс, WordPress, самописные проекты на PHP.

от 2 000 ₽ / час Битрикс, WordPress, PHP
Из бэкапа или без негоВосстановлю из копии, а при её отсутствии — по возможности из сохранившихся данных.
Найду причинуУстраню источник сбоя, чтобы он не повторился.
Проверю функцииЗаказы, формы, каталог и оформление — всё снова работает.

Когда нужно восстановление

Помогу вернуть сайт к работе в разных ситуациях:

  • Сайт не открывается или белый экран
  • Упал после обновления CMS или плагина
  • Повреждена база данных
  • Ошибки после переноса или сбоя хостинга
  • Случайно удалены файлы или данные
  • Нужно восстановить из резервной копии
  • Нет свежего бэкапа — собрать из того, что есть
  • Последствия взлома и заражения

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

Отдельный случай — сайт работает, но частично: пропали товары, не отправляются формы, сбилась вёрстка после обновления шаблона, перестала работать оплата. Такие поломки опаснее явных, потому что их замечают не сразу, а заявки и заказы тем временем теряются. Их я тоже разбираю: нахожу, на каком этапе обрывается сценарий, и возвращаю его к рабочему состоянию.

Типичные ошибки, из-за которых данные теряются окончательно

Самая частая ошибка — попытка «починить всё сразу»: переустановить CMS поверх рабочих файлов, удалить подозрительные папки или откатить хостинг на старую копию, не сохранив текущее состояние. После этого заказы, заявки и изменения за последние дни пропадают безвозвратно, хотя до вмешательства их ещё можно было вытащить из базы. Поэтому любое восстановление я начинаю с полной копии файлов и базы в том виде, в каком они есть сейчас, даже если сайт выглядит безнадёжно сломанным.

Вторая ошибка — восстановить старый бэкап поверх живой базы целиком. Сайт снова открывается, но в нём нет новых товаров, пользователей и заказов, созданных после даты копии. Правильнее развернуть бэкап отдельно, на тестовом домене или в отдельной базе, сравнить его с текущими данными и перенести только то, что действительно повреждено. Это дольше, чем простой откат, зато ничего из свежих данных не теряется.

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

И наконец, после взлома нельзя ограничиваться удалением заражённых файлов: если не закрыть уязвимость и не сменить пароли, сайт заразят снова, иногда в течение нескольких дней. Вредоносный код часто прячется не только в очевидных местах, но и в базе данных, загруженных файлах и задачах планировщика. Поэтому восстановление после взлома у меня всегда включает поиск точки входа и проверку всех этих мест.

Первое правило восстановления — сначала копия текущего состояния, потом любые изменения.

Как восстанавливаю

Сначала сохраняю текущее состояние, чтобы ничего не потерять, затем возвращаю сайт к работе.

Каждый шаг фиксирую, чтобы в любой момент можно было вернуться к исходному состоянию. Если нужно, разворачиваю копию сайта на отдельном домене или поддомене и экспериментирую там, а рабочий сайт не трогаю, пока решение не проверено. Пока идёт работа, держу вас в курсе: что уже найдено, что восстановлено и что осталось проверить.

Порядок важен и в мелочах: при сбое базы сначала выгружаю дамп и проверяю таблицы, при подозрении на взлом — сравниваю файлы с эталонным дистрибутивом CMS той же версии. Так видно, что изменено посторонним, а что — штатными доработками сайта, и ничего нужного не удаляется по ошибке.

  1. Диагностика

    Снимаю копию текущего состояния, изучаю симптомы, журналы и доступные бэкапы. По журналам PHP и веб-сервера определяю, на каком компоненте происходит сбой.

  2. Восстановление

    Восстанавливаю из копии или чиню повреждённые файлы и базу данных. Если бэкап устарел, переношу из текущей базы данные, созданные после даты копии.

  3. Причина сбоя

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

  4. Проверка

    Проверяю основные страницы, формы, каталог и оформление заказа. По итогам рассказываю, что произошло и что стоит сделать, чтобы сбой не повторился.

От чего зависит объём работ

Главный фактор — наличие и свежесть резервной копии. Если есть полный бэкап файлов и базы за вчерашний день, восстановление сводится к развёртыванию и проверке. Если копии нет или она месячной давности, приходится собирать сайт из того, что осталось: файлов на хостинге, дампов, кэша, исходных дистрибутивов CMS. В этом случае сначала оцениваю, какие данные можно вернуть, и только потом начинаю работу.

Второй фактор — характер поломки. Ошибку после обновления плагина обычно видно в журнале сразу. Повреждённые таблицы базы, частично удалённые файлы и последствия взлома требуют больше времени: нужно проверить целостность данных и найти всё, что было изменено. Чем дольше сайт работал в повреждённом состоянии, тем больше данных нужно сверить.

Третий — объём доработок на сайте. Самописные модули, правки в шаблоне и нестандартные интеграции приходится проверять вручную, потому что эталона для сравнения нет. Работа считается по времени — от 2 000 ₽ за час, оценку называю после диагностики. Если часть функций можно вернуть быстро, а остальное требует времени, предлагаю сначала запустить главное — например, каталог и приём заказов.

Влияет и доступ к инфраструктуре. Если есть доступ к серверу по SSH, журналам и панели хостинга, диагностика идёт быстрее. Если доступ только по FTP или в админку, часть проверок делается обходными путями, а иногда приходится запрашивать журналы и копии через поддержку хостинга. Поэтому доступы лучше собрать заранее, ещё до начала работ.

Если сайт часто падает после обновлений, имеет смысл после восстановления заняться его регулярной поддержкой: настроить автоматические резервные копии, обновлять компоненты на тестовой копии и следить за журналами ошибок. О том, что в неё входит, я подробно писал в статье «Поддержка сайта: что входит».

Типовые случаи восстановления: что делаю и сколько это занимает

Ситуации, с которыми обращаются чаще всего, и с чего в каждой начинается работа. Часы — нижняя граница: точную оценку называю, когда видно, что уцелело.

  1. «Хостинг удалил аккаунт за неоплату, а своей копии нет».Сразу запрашиваю у хостинга резервные копии: после блокировки аккаунта их часто хранят ещё какое-то время. Параллельно проверяю домен: в зоне .ru после окончания регистрации у владельца есть 30 дней, чтобы продлить его. Если копий нет, собираю то, что осталось: архивы у прежних подрядчиков, локальные копии, тексты и изображения из веб-архива.диагностикаот 2 чот 4 000 ₽Сборка сайта заново — по объёму уцелевшего.
  2. «База не открывается: „Table … is marked as crashed“ или MySQL не запускается после сбоя».Сначала проверяю место на диске: переполненный раздел — частая причина повреждения таблиц. Таблицы MyISAM и Aria чиню через mysqlcheck —repair. Для InnoDB поднимаю сервер на копии данных с параметром innodb_force_recovery, начиная с минимального значения, выгружаю всё, что читается, и пересобираю базу из дампа.от 2 чот 4 000 ₽На общем хостинге часть шагов — через поддержку.
  3. «Случайно удалили товары или страницы — вернуть только их, не откатывая сайт».В WordPress сначала смотрю корзину: удалённые записи по умолчанию хранятся там 30 дней. Если их нет и там, разворачиваю бэкап в отдельную базу и переношу только нужные строки с прежними ID: для WooCommerce — из wp_posts, wp_postmeta, wp_term_relationships и wc_product_meta_lookup, для Битрикса — из b_iblock_element, b_iblock_element_property, b_catalog_product и b_catalog_price.от 3 чот 6 000 ₽
  4. «Обновили тему или шаблон — пропали все правки, вёрстка разъехалась».Значит, доработки вносили прямо в файлы темы, и обновление их перезаписало. Беру прежнюю версию из бэкапа или копии хостинга, сравниваю её с оригиналом той же версии — для бесплатных тем из каталога wordpress.org, для платных из архива продавца — и выделяю только собственные правки. Переношу их в дочернюю тему, в Битриксе — в /local/templates/, чтобы следующее обновление их не затронуло.от 2 чот 4 000 ₽
  5. «Вместо картинок пустые места: пропали файлы из папки загрузок».Пишу скрипт, который сверяет файлы, записанные в базе, с тем, что лежит на диске: в WordPress пути хранятся в мета-поле _wp_attached_file, в Битриксе — в таблице b_file относительно /upload/. Недостающее беру из бэкапа, а если копии нет — ищу в веб-архиве, остальное передаю списком для повторной загрузки.от 2 чот 4 000 ₽
  6. «Сайт перестал открываться, хотя на нём ничего не меняли».Проверяю то, что истекает по сроку. Сертификат: браузер пишет ERR_CERT_DATE_INVALID — обычно не сработало автопродление Let’s Encrypt из-за закрытого 80-го порта или изменённого пути к сайту. Регистрация домена и DNS-записи, оплата хостинга.от 1 чот 2 000 ₽Продление домена оплачивается регистратору отдельно.

Кто делает работу

Алексей Чугунов — fullstack-разработчик на 1С-Битрикс, WordPress и PHP

  • Более 20 лет в IT: сайты, интернет-магазины, интеграции, обмены с 1С и CRM, поддержка действующих проектов
  • Сертифицированный программист 1С-Битрикс: экзамены «Программист Битрикс» уровня 1 и уровня 2 (2016)
  • Проекты для «Мосфильм», Gipfel, «Эвалар», Major, H&M и других компаний
  • Заранее называю стоимость и сроки, остаюсь на связи после выполнения работ

Частые вопросы

Сколько стоит восстановление сайта?

Работа считается по времени — от 2 000 ₽ за час. Восстановление из свежего бэкапа занимает немного, разбор сложного сбоя без резервной копии — больше. Оценку называю после диагностики.

На итоговую сумму влияют свежесть копии, тип поломки и количество доработок на сайте. Если по ходу работы выясняется, что объём больше ожидаемого, я сообщаю об этом заранее и согласовываю, а не выставляю счёт по факту.

Можно ли восстановить сайт без резервной копии?

Часто да. Даже без бэкапа можно восстановить сайт из копий на хостинге, кэша, исходных дистрибутивов CMS и сохранившихся данных базы. Полнота зависит от ситуации, но во многих случаях сайт удаётся вернуть к работе.

Сначала проверяю, есть ли автоматические копии у хостинга, — о них часто не знают. Если база цела, а пострадали файлы, ядро CMS можно взять из официального дистрибутива той же версии, а шаблон и доработки собрать из уцелевших файлов.

Сайт упал после обновления CMS или плагина — поможете?

Да, это частая задача. Сначала возвращаю сайт в рабочее состояние, затем нахожу причину сбоя (несовместимый модуль, ошибка PHP, правки в ядре) и устраняю её, чтобы проблема не повторилась при следующем обновлении.

Часто причина в том, что модуль или шаблон давно не обновлялся и не поддерживает текущую версию PHP либо CMS. В таком случае исправляю код или подбираю совместимую замену и объясняю, как безопасно обновляться дальше.

С какими CMS работаете?

Восстанавливаю сайты на 1С-Битрикс, WordPress и WooCommerce, а также самописные проекты на PHP. Понимание архитектуры помогает вернуть работоспособность без потери данных и функций.

На Битрикс и WordPress я разрабатываю сайты сам, поэтому знаю, где у этих систем хранятся настройки, кэш и данные, какие модули чаще всего конфликтуют и как проверить целостность ядра. С самописными проектами работаю по журналам и коду.

Что делать прямо сейчас, если сайт не работает?

Не пытайтесь массово удалять или переустанавливать — так можно потерять данные. Лучше сразу пришлите доступы и описание проблемы: я сниму копию текущего состояния и начну диагностику, чтобы ничего не потерять.

Полезно вспомнить и записать, что менялось накануне: обновления, установка плагинов, смена тарифа или хостинга, правки в коде. Эта информация заметно сокращает поиск причины. Если сайт был взломан, смените пароли от хостинга и админки, но файлы пока не трогайте.

Восстановите сайт после взлома?

Да. Нахожу и удаляю вредоносный код, проверяю файлы ядра CMS и базу данных на посторонние изменения, восстанавливаю пострадавшие страницы и функции.

Главное — найти, как злоумышленник попал на сайт: через устаревший плагин, слабый пароль или уязвимый самописный код. Без этого чистка даёт временный результат. После восстановления помогаю сменить пароли и доступы и рассказываю, что ещё стоит сделать для защиты. Отдельно проверяю, не появились ли на сайте чужие администраторы.

Что нужно от меня для начала работ?

Доступы к хостингу или серверу (панель управления, SSH или FTP), к базе данных и к административной части сайта. Если есть резервные копии — укажите, где они лежат.

Также пригодится краткое описание: когда сайт перестал работать, что этому предшествовало и какие функции важнее всего вернуть в первую очередь. Если доступов не хватает, подскажу, где их найти или как запросить у хостинга. Все доступы использую только для работы с вашим сайтом.

Можно ли восстановить сайт из веб-архива?

Только частично: веб-архив хранит снимки страниц — тексты, часть изображений и стилей, но не PHP-код, базу данных, админку и формы. Из него можно вернуть контент и внешний вид, а работающий сайт придётся собрать заново на CMS и перенести туда сохранившиеся страницы. Список адресов из архива пригодится и для 301-редиректов, если структура сайта изменится.

Можно ли восстановить базу данных, если её удалили?

Да, если есть резервная копия или на сервере был включён двоичный журнал MySQL. Из бэкапа база разворачивается целиком, а изменения после даты копии можно доиграть из двоичного журнала (binlog) утилитой mysqlbinlog — до момента удаления. На общем хостинге журнал обычно недоступен, поэтому первым делом стоит спросить поддержку о копиях базы.

Потеряет ли сайт позиции в поиске, пока он не работает?

Короткий простой обычно проходит без последствий, а если сайт недоступен долго, страницы начинают выпадать из индекса. Пока идёт восстановление, лучше отдавать код 503 с заголовком Retry-After, а не пустую страницу с кодом 200 или 404. После запуска проверяю ответы ключевых страниц и отправляю их на переобход в Яндекс Вебмастере и Google Search Console.

Сайт не работает?

Пришлите доступы и описание проблемы — сниму копию текущего состояния, найду причину и верну сайт к работе.

+7 (915) 016-99-88