Перейти к содержимому

Восстановление из резервной копии - порядок, отказы, проверка

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

Решение

Готовим площадку под разворот:

Окно терминала
mysql -e "CREATE DATABASE bitrix_new CHARACTER SET utf8mb4;"
df -h /home/bitrix # нужно место под архив и под распакованное
df -i /home/bitrix # и запас по числу файлов на разделе
php -i | grep -E 'memory_limit|max_execution_time|upload_max_filesize'
# распаковка идёт процессом PHP: его пределы и решают, дойдёт ли она до конца

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

Запускаем восстановление:

Окно терминала
# корень сайта должен быть пуст: чужие файлы ломают разворот
ls -A /home/bitrix/www/ | head
curl -o /home/bitrix/www/restore.php https://www.1c-bitrix.ru/download/scripts/restore.php
chown bitrix:bitrix /home/bitrix/www/restore.php
# после разворота скрипт удаляют: он открыт по прямой ссылке всем

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

Проверяем настройки подключения после разворота:

// /bitrix/php_interface/dbconn.php и /bitrix/.settings.php
$conn = \Bitrix\Main\Config\Configuration::getValue('connections');
printf("база=%s хост=%s\n", $conn['default']['database'], $conn['default']['host']);
// эти файлы приезжают из копии и указывают на прежний сервер

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

Убираем следы прежней площадки:

BXClearCache(true); // кэш компонентов целиком
CHTMLPagesCache::getInstance()->deleteAll(); // композитные страницы
COption::SetOptionString('main', 'server_name', 'test.example.com');

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

Свежесть самой копии проверяют до разворота, а не после него. Архив недельной давности с рабочего сайта означает потерю всех заказов за неделю, и узнать об этом лучше раньше, чем после переключения домена.

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

Копия мультисайта разворачивается всегда целиком, а не по одному сайту. Разделить проекты можно только после разворота, отключив лишние сайты и почистив их данные.

Типичные проблемы

Распаковка обрывается на середине без ошибки.

Процессу не хватило времени или памяти на большой архив копии. Пределы PHP поднимают на время разворота и возвращают обратно после.

Скрипт восстановления жалуется на непустой корень.

В папке остались файлы от прежней установки сайта. Разворот делают в пустой корень, иначе два проекта смешиваются в одном.

Тестовый сайт правит рабочие данные.

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

После восстановления видны старые страницы.

Кэш и композитные страницы развернулись вместе с копией сайта. Их чистят до первой проверки сайта, иначе в браузере видны страницы прежней площадки.

С тестовой копии ушли письма покупателям.

Почтовые события и обмен на копии остались включёнными. Их отключают до первого захода на восстановленный сайт и первого запуска агентов.

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

Можно ли развернуть копию вручную, без скрипта?

Да: распаковать архив и залить базу из выгрузки. Тогда настройки подключения и адрес сайта правят руками.

Что делать, если копия больше диска?

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

Как проверить, что восстановление удалось?

Зайти в административную часть, открыть каталог и посмотреть последние заказы. Открывшаяся главная страница ещё ничего не доказывает.

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

Ключ приезжает в копии, но на второй площадке он работает в режиме разработки. Для боевого сайта нужен свой ключ.

Смежное

Первоисточник