Бэкап Битрикса: что именно нужно сохранять и где это лежит
К нам чаще всего приходят с одной из трёх ситуаций: сайт упал после обновления, клиент переезжает на новый хостинг, или релиз новой версии шаблона сломал прод и нужно откатиться. Во всех трёх случаях вопрос звучит одинаково — «а бэкап у вас есть?». И вот тут выясняется, что у половины проектов «бэкап» — это либо только дамп MySQL, снятый полгода назад, либо только архив файлов без базы. Ни то, ни другое не разворачивается в рабочий сайт.
У нас на проектах бэкап Битрикса — это не один файл, а набор из нескольких независимых частей. Ядро ( /bitrix/ ) и публичная часть содержат код, шаблоны, компоненты. База MySQL хранит контент, настройки, пользователей, свойства инфоблоков. Конфиг /bitrix/php_interface/dbconn.php держит доступы к БД и параметры соединения. Плюс .htaccess с правилами ЧПУ и редиректами — без него сайт откроется, но все URL поедут.
Ограничиться только дампом MySQL нельзя по простой причине: кастомный код в /local/ и /bitrix/php_interface/ в базе не лежит. Восстановите БД на чистой установке — получите данные без логики, которая их обрабатывает. Симметрично, архив файлов без базы даст вам «мёртвый» сайт: шаблоны на месте, а товаров и настроек нет. Обе части нужно снимать синхронно, иначе получите рассинхрон версий.
Что обязательно входит в бэкап:
- Файлы сайта:
/bitrix/,/local/,/upload/,.htaccessв корне - Дамп базы MySQL — целиком, со всеми таблицами и триггерами
- Конфиг
/bitrix/php_interface/dbconn.php— отдельно, потому что в нём пароли - Кастомные модули в
/local/modules/— они не восстанавливаются из обновлений ядра - Настройки cron и агентов: файл crontab и записи в таблице
b_agent
| Что бэкапить | Где лежит | Как часто меняется | Восстановить из 1С? |
|---|---|---|---|
| Ядро и публичная часть | /bitrix/ |
При обновлениях | Нет |
| Кастомный код | /local/ |
При релизах | Нет |
| База MySQL | СУБД на сервере | Ежедневно | Частично |
| Загруженные файлы | /upload/ |
При контенте | Нет |
| Конфиг соединения | dbconn.php |
Редко | Нет |
| Правила ЧПУ | .htaccess |
Редко | Нет |
Резервное копирование Битрикс: локально, в облако 1С-Битрикс или в сторонний S3
По официальной документации у резервных копий Битрикса есть три места хранения: локально на сервере, в облаке «1С-Битрикс» и в сторонних облачных хранилищах. Выбор между ними — не «вкусовщина», а три компромисса между стоимостью, скоростью восстановления и доступностью архива в момент, когда сервер уже лёг.
Локальный бэкап самый быстрый на восстановление и бесплатный по хранению, но лежит на том же диске, что и сайт. Сервер падает целиком или хостинг блокирует аккаунт — копия исчезает вместе с проектом.
Облако «1С-Битрикс» встроено в платформу: настроил раз, дальше копии уезжают по расписанию без внешних скриптов. Минусы — платная подписка и обязательное шифрование. Сторонний S3 (CLO, Timeweb и подобные) — золотая середина: файлы лежат вне сервера, тарифы обычно ниже, но бакет нужно создать самому и прописать в параметрах размещения. На практике мы комбинируем: свежий локальный бэкап за последние сутки плюс недельный в S3. Так есть и быстрое откатывание, и защита от потери сервера.
| Способ хранения | Доступность при падении сервера | Шифрование | Требования к лицензии | Когда выбираем |
|---|---|---|---|---|
| Локально на сервере | Нет | Опционально | Любая | Быстрый откат за сутки |
| Облако 1С-Битрикс | Да | Обязательно | Коммерческая, кроме «Первый сайт» | Нет своего S3 |
| Сторонний S3 | Да | Опционально | Любая | Свой бакет, гибкий тариф |
Настройка одинаковая для всех трёх вариантов. Разница только на шаге выбора хранилища.
- Открыть Настройки > Инструменты > Резервное копирование > Список резервных копий и убедиться, что модуль
mainактивен — без него раздел не откроется. - Перейти в настройки размещения копий и выбрать хранилище: локальное, облако «1С-Битрикс» или сторонний S3.
- Для стороннего S3 создать бакет (CLO, Timeweb и т.п.) и указать его реквизиты в параметрах размещения резервной копии.
- Проверить доступность: Настройки > Облако 1С-Битрикс > Резервные копии — там виден список копий, уже загруженных в облако.
В облаке «1С-Битрикс» шифрование отключить нельзя — это системное ограничение платформы. Если по политике безопасности вам нужны незашифрованные архивы (например, для аудита или передачи подрядчику), выбирайте локальное хранение или сторонний S3.
Автоматический бэкап Битрикс: cron, BitrixVM и расписание агентов
Распространённая ошибка: сайт полгода живёт на ручных бэкапах «когда вспомним». Пока всё работает — кажется, что этого достаточно. В момент аварии выясняется, что последняя копия сделана месяц назад, а между ней и текущим состоянием — сотни заказов, новые разделы каталога и правки контент-менеджеров. Ручное копирование раз в месяц не защищает, а создаёт иллюзию защиты.
Перевести копирование на расписание в Битриксе можно двумя путями: через агенты модуля main (работает на любом хостинге, где есть cron) и через настройки BitrixVM/BitrixEnv (для виртуальных машин от 1С-Битрикс, где всё уже собрано в меню). Оба варианта опираются на один и тот же механизм — агенты, которые запускаются по расписанию, а само расписание копирования задаётся отдельно в настройках модуля. Разберём оба.
# crontab -u bitrix -e
# Запуск агентов Битрикса каждую минуту от пользователя сайта
* * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php >> /home/bitrix/www/bitrix/modules/main/tools/cron_events.log 2>&1Ключевой момент, который часто упускают: cron_events.php сам бэкап не делает. Скрипт лишь проверяет расписание агентов и запускает те задачи, время которых уже наступило. Именно поэтому его ставят на каждую минуту — чтобы момент срабатывания агента не «плыл» на десятки минут. Само расписание копирования задаётся отдельно — в настройках модуля main (Настройки → Инструменты → Резервное копирование), где указывается периодичность, время запуска и место хранения: локально, в облаке «1С-Битрикс» или в стороннем S3.
Если проект крутится на BitrixVM, отдельный crontab не нужен — там всё уже настроено. Расписание копирования меняется через меню:
- В консоли BitrixVM выбрать пункт 6. Configure pool sites.
- Затем 6. Change backup settings on site.
- Указать периодичность копирования и место хранения (локально или в облако).
Если cron_events.php не запускается каждую минуту — агенты не срабатывают вовремя, и автоматический бэкап молча пропускается. Никаких ошибок в админке вы не увидите. Проверяйте лог агентов и наличие свежих архивов в списке копий — это единственный надёжный способ убедиться, что расписание реально работает.
Бэкап базы Битрикс: дамп MySQL отдельно от файлов
Самый частый запрос на эту тему — «нужно быстро снять базу, файлы не трогаем». Сценариев три: перед миграцией на новый сервер (файлы перельём отдельно, а базу удобнее тащить дампом), перед массовой правкой каталога (загружаем новый прайс, меняем цены, переиндексируем — и хотим откатиться только по данным, не трогая код), и при выгрузке на dev-стенд (там нужна свежая копия контента, а ядро и upload уже свои).
Дамп делают отдельно от файлов потому, что база и файловая часть меняются с разной скоростью и живут по разным правилам. Штатный бэкап Битрикса упаковывает всё вместе — ядро, публичку, upload и дамп БД — в один архив. Это правильно для катастрофы, но избыточно, когда нужно откатить только данные: разворачивать 20 ГБ upload ради отката таблиц b_catalog_price никто не хочет.
Поэтому в проектах с активным импортом мы держим оба контура: полный архив по расписанию (об этом — в разделе про автоматизацию выше) и отдельный дамп базы по требованию.
mysqldump \
--single-transaction \
--routines \
--triggers \
--default-character-set=utf8mb4 \
--set-gtid-purged=OFF \
-h localhost -u bitrix_user -p \
bitrix_db > /backup/bitrix_db_$(date +%F_%H-%M).sqlРазбираем флаги по порядку, потому что каждый закрывает свою граблю. --single-transaction — ключевой: для InnoDB-таблиц (а Битрикс в актуальных версиях работает именно на них) он открывает транзакцию с уровнем REPEATABLE READ и снимает консистентный снимок без LOCK TABLES. Сайт продолжает принимать заказы и писать в корзину — дамп просто видит базу на момент старта транзакции. --routines сохраняет хранимые процедуры и функции: если у вас есть кастомные обработчики, без этого флага они в дамп не попадут и после восстановления «отвалятся» молча. --triggers — по той же причине для триггеров. --default-character-set=utf8mb4 обязателен: без него кириллица в дампе уедет в кракозябры, и вы узнаете об этом только после восстановления, когда уже поздно.
Восстановление — обратной командой, тоже без сюрпризов:
mysql -h localhost -u bitrix_user -p \
--default-character-set=utf8mb4 \
bitrix_db < /backup/bitrix_db_2025-01-15_03-00.sqlЕсли база не пустая и вы восстанавливаете поверх — сначала убедитесь, что в дампе есть DROP TABLE IF EXISTS (mysqldump добавляет его по умолчанию), иначе получите ошибки на существующих таблицах. Для переноса на dev-стенд удобнее залить дамп в чистую базу и один раз прогнать /bitrix/modules/main/tools/restore_db.php — но это уже сценарий полного восстановления, о нём ниже.
Грабля: дамп без --single-transaction на живой базе даёт рассогласованный снимок. MySQL читает таблицы последовательно, и между чтением b_sale_order и b_sale_basket сайт успевает принять новый заказ: в дампе заказ есть, а позиций в нём нет. Для каталога на 20k+ SKU с активным импортом это ломает остатки — после восстановления товары «висят» без привязки к складу. Всегда добавляйте --single-transaction, если база InnoDB и работает под нагрузкой.
Восстановление Битрикс из бэкапа: меню админки или restore.php
В источниках про восстановление царит путаница: одни статьи настаивают на меню действий в списке копий, другие — на обязательном restore.php с ручной загрузкой архива. Противоречия тут нет. Это два разных сценария, и выбираются они по одной развилке: восстанавливаете вы на том же сервере или переезжаете на другой. Когда сайт лежит после неудачного обновления и хостинг тот же, хватит админки. Когда переезжаете на новую площадку, поднимаете копию для тестирования или старый сервер уже недоступен — без скрипта не обойтись.
В нашей практике оба варианта встречаются примерно поровну. Разница принципиальная: админка восстанавливает поверх уже установленной системы и работает только пока живы файлы и БД. restore.php — это самораспаковывающийся установщик, который поднимает систему с нуля на чистом хостинге. По официальной документации, если архив содержит полную копию (ядро и публичную часть), предварительная установка «1С-Битрикс» на новом сервере не требуется. Именно поэтому при переносе скрипт незаменим, а при локальном откате избыточен.
Восстановление на том же сервере через меню админки
Этот путь — для ситуации «сайт сломался, но сервер и хостинг те же». Заходим в Настройки → Инструменты → Резервное копирование → Список резервных копий. Если копии лежали в облаке, список смотрим в разделе Настройки → Облако 1С-Битрикс → Резервные копии — это два разных места, и копии из одного не видны в другом.
Дальше в строке нужного архива открываем меню действий и выбираем восстановление. Система распакует файлы поверх текущих и предложит подключить базу. Здесь важно понимать: операция затирает текущее состояние. Восстановите файлы, но оставьте «свежую» базу — получите рассинхрон версий ядра и данных. Для полного отката восстанавливайте и файлы, и дамп из одной и той же копии.
Способ хорош скоростью: ничего не нужно скачивать и заливать, всё происходит на сервере. Минус — он бесполезен, если файлы повреждены или сервер недоступен.
Перенос на новый хостинг через restore.php
Когда цель — поднять сайт на другой площадке, меню админки не поможет: старой системы на новом сервере просто нет. Здесь работает связка «скачать архив + скачать restore.php + залить оба на новый хостинг». Решение из обсуждения: скачать бэкап и restore.php из того же списка копий, залить на новый хостинг, открыть скрипт в браузере и пройти мастер.
Дальше пошагово.
- Скачать архив и файл
restore.phpиз списка резервных копий — оба лежат рядом в админке. - Залить архив и
restore.phpв корень нового сайта по FTP или SSH. Если архив многочастный — все части в одну папку. - Открыть
restore.phpв браузере и выбрать «Архив загружен в корневую папку сервера». - Пройти мастер «далее — далее — далее», указав параметры подключения к новой базе данных.
Если архив многочастный, а вы залили только первую часть, restore.php не найдёт остальные фрагменты и упадёт на середине распаковки — сайт останется в половинчатом состоянии. Все части архива должны лежать рядом с restore.php в одной папке, иначе мастер не соберёт их в целое.
Что ломает бэкап Битрикса: лимит 2 ГБ, права и cron
Сколько раз вы видели, как бэкап «вроде бы есть», а при аварии выясняется, что он битый? У нас в практике это происходит по четырём причинам, которые повторяются из проекта в проект: архив обрывается на 2 ГБ, после распаковки сайт не открывается из-за прав, cron не крутится, а в облаке не отключается шифрование. Разберём каждую граблю — с причиной и способом обойти.
| Грабля | Причина | Решение |
|---|---|---|
| Архив обрывается на 2 ГБ | Системное ограничение PHP | Разбить на части или дампить через консоль |
restore.php не видит части архива |
Фрагменты лежат в разных папках | Скачать все части в одну папку рядом со скриптом |
| Права 644 вместо 755 | Распаковка от чужого пользователя | Проверить владельца и права на /upload |
| Cron не крутится | Задача не добавлена в расписание | Проверить запуск cron_events.php каждую минуту |
| Шифрование в облаке не отключается | Ограничение облака «1С-Битрикс» | Учитывать при выборе места хранения |
Лимит 2 ГБ — это не настройка Битрикса, а системное ограничение PHP: одна часть архива физически не может быть больше. Поэтому на больших каталогах штатный бэкап режет копию на фрагменты. И именно здесь ломается восстановление. Если скачать не все части и не положить их в одну папку рядом с restore.php, скрипт просто не соберёт архив. Проверьте, что все фрагменты на месте, прежде чем запускать восстановление.
Права после распаковки — вторая классика. Архив разворачивается от пользователя, отличного от владельца сайта, и файлы получают 644 вместо 755. Сайт открывается частично или не открывается вовсе, а загрузка файлов в /upload падает с ошибкой доступа. После восстановления мы всегда проверяем владельца каталогов и права на /upload и /bitrix. Это рутина, которую забывают.
С cron история проще: скрипт /bitrix/modules/main/tools/cron_events.php должен запускаться каждую минуту. Если задача не добавлена в расписание хостинга, агенты не отрабатывают, расписание бэкапов молчит, а в админке всё выглядит настроенным. Проверяется одной командой в консоли — и лучше сделать это до аварии, а не после.
Чек-лист: настроили бэкап Битрикса — проверьте эти пункты
Этот список мы прогоняем на каждом проекте после того, как настроили резервное копирование. Не потому что не доверяем себе, а потому что цена пропущенного пункта слишком высока. Бэкап, который «вроде делается», и бэкап, который действительно восстанавливается, — это две разные вещи. Разница выясняется ровно в тот момент, когда сайт уже лежит, клиент звонит, а у вас нет времени разбираться, почему архив битый или почему в нём не хватает половины файлов.
Проходим по чек-листу сразу после настройки, а потом возвращаемся к нему перед каждым крупным релизом или миграцией.
Семь пунктов. Каждый закрывает конкретную дыру, о которой мы уже писали выше.
cron_events.phpпрописан в crontab и запускается каждую минуту — без этого агенты копирования просто не сработают по расписанию.- Расписание копирования задано явно: час, периодичность, тип (полный или инкрементальный) — а не оставлено на дефолт.
- Место хранения доступно и проверено: локальный диск не переполнен, бакет S3 отвечает, облако «1С-Битрикс» активно по лицензии.
- Тестовое восстановление на dev-стенде прошло — вы лично открывали
restore.phpи дошли до рабочего сайта. - Архив не бьётся на части по 2 ГБ без причины — если фрагментация есть, понимаете, что это лимит PHP, а не сбой.
- Права на
/uploadпосле распаковки корректны — иначе сайт откроется, но картинки и файлы не отдаст. - Пароль от БД и ключи S3 не лежат в git — проверьте
.gitignoreи историю коммитов, а не только текущее состояние.
Читайте также: Невосстановимая ошибка СУБД 1С: причины и решение, Обмен с сайтом 1С Битрикс: пошаговая настройка узла и импорта.
Подробнее об услуге: поддержка и сопровождение сайтов на Битрикс.
Частые вопросы
Можно ли бэкапить только базу, а файлы не трогать?
Да, если файлы не менялись с прошлого бэкапа — дампа MySQL достаточно. Но при обновлении ядра, установке модулей или загрузке картинок через админку файловая часть меняется, и без неё восстановление даст рассинхрон.
Что делать, если архив больше 2 ГБ и restore.php его не принимает?
Разбейте бэкап на части: отдельно дамп базы (mysqldump) и отдельно tar-архив файлов, либо поднимите лимиты upload_max_filesize и post_max_size в php.ini. Учтите, что встроенный механизм Битрикса всё равно режет архив по 2 ГБ — крупные проекты бэкапят через cron и mysqldump/tar напрямую.
Чем отличается бэкап в облако 1С-Битрикс от бэкапа в свой S3?
Облако 1С-Битрикс — это их хранилище с готовой интеграцией через модуль «Резервное копирование», но платное и с ограничением по тарифу. Свой S3 (Amazon, Selectel, Yandex Object Storage) дешевле и не зависит от вендора, но требует настройки через boto3/aws-cli или сторонний модуль.
А если у меня BitrixVM — нужно ли ставить cron вручную?
Нет, в BitrixVM бэкапы настраиваются через меню «Настройки → Резервное копирование» в панели управления, расписание уже зашито в системный cron. Ручной crontab нужен только если вы хотите нестандартный сценарий — например, выгрузку дампа на внешний сервер.
Можно ли восстановить сайт из бэкапа на другом хостинге?
Да, но нужно поправить dbconn.php (хост, логин, пароль, имя БД) и при необходимости — пути в .settings.php. Если домен другой, обновите его в настройках сайта через админку или в таблице b_lang.
Что делать, если после восстановления файлы открываются только через Битрикс, а напрямую отдают 403?
Проверьте права: файлы должны быть 644, папки 755, владелец — пользователь веб-сервера (обычно www-data или apache). Также убедитесь, что в .htaccess не осталось правил с путями от старого хостинга.