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

Не создаётся резервная копия - причины по убыванию частоты

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

Как проверить

Смотрим место и содержимое каталога копий:

Окно терминала
df -h /home/bitrix/www
du -sh /home/bitrix/www/bitrix/backup
ls -lhS /home/bitrix/www/bitrix/backup | head

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

Смотрим лимиты PHP, в которые упирается копирование:

Окно терминала
php -r 'foreach (["max_execution_time","memory_limit","upload_max_filesize"] as $k)
printf("%-22s %s\n", $k, ini_get($k));'

Копирование идёт шагами из веб-запроса и подчиняется тем же ограничениям, что и обычная страница. Обрыв на середине почти всегда упирается в одно из этих трёх значений.

Причины

  1. Кончилось место на диске примерно 40% случаев

    ПризнакКопирование обрывается на середине, в логе ошибки записи, сайт при этом работает.

    ПроверкаСмотрим свободное место и размер каталога резервных копий внутри сайта.

    Что делатьУдаляем старые архивы и переносим хранение в облако или на внешний диск, а не рядом с сайтом.

  2. Копирование не укладывается в лимиты PHP примерно 30% случаев

    ПризнакПроцесс зависает на одном и том же проценте и обрывается без сообщения.

    ПроверкаСверяем время шага и размер архива с ограничениями времени выполнения и памяти.

    Что делатьУменьшаем размер части архива в настройках модуля либо переходим на копирование средствами сервера.

  3. Нет прав на каталог резервных копий примерно 20% случаев

    ПризнакСообщение о нехватке прав появляется сразу, до начала копирования.

    ПроверкаПроверяем владельца и права каталога bitrix/backup и путь, заданный в настройках.

    Что делатьВозвращаем каталогу владельца веб-сервера: после переноса сайта права часто остаются от прежнего пользователя.

  4. Архив слишком велик для скачивания примерно 10% случаев

    ПризнакКопия создалась, но по ссылке приходит ошибка или файл обрывается.

    ПроверкаСмотрим размер архива и ограничения веб-сервера на отдачу больших файлов.

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

Если ничего не помогло

Делаем копию средствами сервера, минуя PHP:

Окно терминала
# файлы и база отдельно: так процесс не зависит от лимитов веб-запроса
tar -czf /backup/site-$(date +%F).tar.gz -C /home/bitrix/www --exclude='bitrix/backup' .
mysqldump --single-transaction --routines --events sitemanager | gzip > /backup/db-$(date +%F).sql.gz

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

Проверяем архив до того, как он понадобится:

Окно терминала
gzip -t /backup/site-$(date +%F).tar.gz && echo 'архив цел'
tar -tzf /backup/site-$(date +%F).tar.gz | wc -l # число файлов внутри
zcat /backup/db-$(date +%F).sql.gz | tail -1 # последняя строка дампа

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

Ставим копирование на расписание и чистим старое:

Окно терминала
# /etc/cron.d/bitrix-backup: копия ночью, хранение две недели
0 3 * * * bitrix /usr/local/bin/site-backup.sh >> /var/log/site-backup.log 2>&1
0 5 * * * bitrix find /backup -name '*.gz' -mtime +14 -delete

Без второй строки диск заполнится ровно так же, как при штатном копировании: у архивов нет срока жизни, если его не задать.

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

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

Почему копирование зависает всегда на одном проценте?

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

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

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

Можно ли складывать копии на сетевой ресурс?

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

Копия распаковывается с ошибкой размера файлов.

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

Смежное

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