Команды резервного копирования
Команды для управления резервными копиями сайта средствами Битрикса.
backup:create
Создает резервную копию сайта средствами Битрикса (файлы + база данных).
Синтаксис
php bitrix.php backup:create [опции]Основные опции
--name=<имя>- имя архива бэкапа (без расширения)--skip-kernel- не включать ядро Битрикса в бэкап--skip-public- не включать публичную часть в бэкап--skip-db- не включать базу данных в бэкап--no-compression- отключить сжатие архива
Исключения из базы данных
--skip-stat- исключить статистику (таблицы b_stat*)--skip-search- исключить поисковый индекс (таблицы b_search_*)--skip-log- исключить журнал событий (таблица b_event_log)
Исключения файлов
--exclude-dir=<путь>- исключить директорию из бэкапа (можно указать несколько раз)--exclude-file=<путь>- исключить файл из бэкапа (можно указать несколько раз)--exclude-mask=<маска>- исключить по маске, например*.log,tmp/*(можно указать несколько раз)--max-file-size=<КБ>- исключить файлы размером более указанного в КБ (0 - без ограничения, по умолчанию: 0)
Экспертные настройки
--no-integrity-check- не проверять целостность архива (по умолчанию: проверка включена)--max-exec-time=<секунды>- длительность шага в секундах (по умолчанию: 300)--max-exec-time-sleep=<секунды>- интервал между шагами в секундах (по умолчанию: 3)--archive-size-limit=<МБ>- максимальный размер несжатых данных в одной части архива в МБ, допустимые значения 11-2047 (по умолчанию: 100)
Параметры по умолчанию
- Включено: ядро, публичная часть, база данных, сжатие, проверка целостности
- Длительность шага: 300 секунд
- Интервал между шагами: 3 секунды
- Размер части архива: 100 МБ
- Макс. размер файла: без ограничений
- Исключения из БД: не применяются
Архив сохраняется в /bitrix/backup/ в формате .tar.gz (или .tar без сжатия).
Примеры использования
Основные примеры
# Полный бэкап (файлы + БД) с параметрами по умолчанию
php bitrix.php backup:create
# С указанием имени архива
php bitrix.php backup:create --name=my_backup
# Только база данных
php bitrix.php backup:create --skip-kernel --skip-public
# Только файлы (без БД)
php bitrix.php backup:create --skip-db
# Без ядра Битрикса
php bitrix.php backup:create --skip-kernel
# Без публичной части
php bitrix.php backup:create --skip-publicИсключения из базы данных
# Исключить статистику из БД (таблицы b_stat*)
php bitrix.php backup:create --skip-stat
# Исключить поисковый индекс (таблицы b_search_*)
php bitrix.php backup:create --skip-search
# Исключить журнал событий (таблица b_event_log)
php bitrix.php backup:create --skip-log
# Комплексное исключение из БД
php bitrix.php backup:create --skip-stat --skip-search --skip-logИсключения файлов и директорий
# С исключением директорий
php bitrix.php backup:create --exclude-dir=/upload/tmp --exclude-dir=/bitrix/cache
# С исключением файлов
php bitrix.php backup:create --exclude-file=/bitrix/.settings.php
# С исключением по маске
php bitrix.php backup:create --exclude-mask="*.log" --exclude-mask="*.tmp"
# Исключить большие файлы (более 10 МБ)
php bitrix.php backup:create --max-file-size=10240Экспертные настройки
# Настройка длительности шагов (по умолчанию 300 сек)
php bitrix.php backup:create --max-exec-time=600
# Настройка интервала между шагами (по умолчанию 3 сек)
php bitrix.php backup:create --max-exec-time-sleep=5
# Настройка размера части архива (по умолчанию 100 МБ, допустимо 11-2047)
php bitrix.php backup:create --archive-size-limit=500
# Отключить проверку целостности архива (по умолчанию включена)
php bitrix.php backup:create --no-integrity-check
# Комплексная настройка производительности
php bitrix.php backup:create \
--max-exec-time=600 \
--max-exec-time-sleep=5 \
--archive-size-limit=500Комплексные примеры
# Исключить кеш и временные файлы
php bitrix.php backup:create \
--exclude-dir=/bitrix/cache \
--exclude-dir=/bitrix/managed_cache \
--exclude-dir=/bitrix/stack_cache \
--exclude-dir=/upload/tmp
# Исключить логи и временные файлы по маске
php bitrix.php backup:create \
--exclude-mask="*.log" \
--exclude-mask="*.tmp" \
--exclude-mask=".DS_Store"
# Чистый бэкап без статистики, кеша и логов
php bitrix.php backup:create \
--name=production_backup \
--skip-stat \
--skip-search \
--skip-log \
--exclude-dir=/bitrix/cache \
--exclude-dir=/upload/tmp \
--exclude-mask="*.log"
# Быстрый бэкап с минимальными данными
php bitrix.php backup:create \
--name=minimal_backup \
--skip-stat \
--skip-search \
--skip-log \
--max-file-size=5120 \
--exclude-dir=/upload \
--no-integrity-checkСтратегии резервного копирования
Ежедневный полный бэкап
#!/bin/bash
# Создание полного ежедневного бэкапа
cd /var/www/bitrix
BACKUP_NAME="daily_$(date +%Y%m%d)"
php bitrix.php backup:create \
--name="$BACKUP_NAME" \
--skip-stat \
--skip-search \
--exclude-dir=/bitrix/cache \
--exclude-dir=/upload/tmp
echo "Бэкап создан: $BACKUP_NAME"Еженедельный полный бэкап
#!/bin/bash
# Полный еженедельный бэкап (все включено)
cd /var/www/bitrix
BACKUP_NAME="weekly_full_$(date +%Y%m%d)"
php bitrix.php backup:create \
--name="$BACKUP_NAME" \
--max-exec-time=600 \
--archive-size-limit=500
echo "Полный еженедельный бэкап создан: $BACKUP_NAME"Только база данных (часто)
#!/bin/bash
# Частый бэкап только БД
cd /var/www/bitrix
BACKUP_NAME="db_only_$(date +%Y%m%d_%H%M)"
php bitrix.php backup:create \
--name="$BACKUP_NAME" \
--skip-kernel \
--skip-public \
--skip-stat \
--skip-search
echo "Бэкап БД создан: $BACKUP_NAME"Бэкап перед обновлением
#!/bin/bash
# Полный бэкап перед обновлением системы
cd /var/www/bitrix
BACKUP_NAME="pre_update_$(date +%Y%m%d_%H%M%S)"
echo "Создание резервной копии перед обновлением..."
php bitrix.php backup:create \
--name="$BACKUP_NAME" \
-v
if [ $? -eq 0 ]; then
echo "✓ Резервная копия создана успешно"
echo "Можно приступать к обновлению"
else
echo "✗ Ошибка создания резервной копии"
echo "Обновление отменено"
exit 1
fiДифференцированный бэкап
#!/bin/bash
# Разные типы бэкапов в разные дни недели
cd /var/www/bitrix
DAY_OF_WEEK=$(date +%u)
case $DAY_OF_WEEK in
1) # Понедельник - полный бэкап
php bitrix.php backup:create --name="full_$(date +%Y%m%d)"
;;
3|5) # Среда и пятница - БД + важные файлы
php bitrix.php backup:create \
--name="partial_$(date +%Y%m%d)" \
--skip-stat --skip-search \
--exclude-dir=/upload
;;
*) # Остальные дни - только БД
php bitrix.php backup:create \
--name="db_$(date +%Y%m%d)" \
--skip-kernel --skip-public
;;
esacАвтоматизация в cron
Базовая настройка
# Полный бэкап каждый день в 2:00
0 2 * * * cd /var/www/bitrix && php bitrix.php backup:create --name=daily_backup
# Бэкап только базы данных каждые 6 часов
0 */6 * * * cd /var/www/bitrix && php bitrix.php backup:create --skip-kernel --skip-public --name=db_backup
# Чистый бэкап с исключением статистики, индекса и логов из БД
0 3 * * * cd /var/www/bitrix && php bitrix.php backup:create --name=clean_backup --skip-stat --skip-search --skip-log --exclude-dir=/bitrix/cache --exclude-dir=/upload/tmp --exclude-mask="*.log"
# Быстрый минимальный бэкап для тестирования
0 4 * * * cd /var/www/bitrix && php bitrix.php backup:create --name=test_backup --skip-stat --skip-search --max-file-size=5120 --no-integrity-check
# Автоматическая очистка старых бэкапов (каждый день в 5:00)
0 5 * * * cd /var/www/bitrix && php bitrix.php backup:clean --days=7 --keep=3 --forceПродвинутые сценарии
#!/bin/bash
# Интеллектуальный скрипт бэкапа с ротацией
cd /var/www/bitrix
BACKUP_NAME="auto_$(date +%Y%m%d_%H%M)"
# Создать бэкап
echo "Начало создания бэкапа: $(date)"
php bitrix.php backup:create --name="$BACKUP_NAME" --skip-stat --skip-search -v
if [ $? -eq 0 ]; then
echo "✓ Бэкап создан успешно"
# Удалить старые бэкапы (старше 7 дней, оставить минимум 3)
php bitrix.php backup:clean --pattern="auto_*" --days=7 --keep=3 --force
echo "Старые бэкапы удалены"
# Отправить уведомление
echo "Бэкап $BACKUP_NAME создан успешно" | \
mail -s "Backup Success" admin@example.com
else
echo "✗ Ошибка создания бэкапа"
echo "Ошибка при создании бэкапа $BACKUP_NAME" | \
mail -s "Backup Failed" admin@example.com
exit 1
fiУправление бэкапами
Просмотр списка бэкапов
#!/bin/bash
# Простой просмотр списка бэкапов
cd /var/www/bitrix
php bitrix.php backup:list
# Показать только последние 5
php bitrix.php backup:list --limit=5
# Отсортировать по размеру
php bitrix.php backup:list --sort=sizeПроверка наличия бэкапов
#!/bin/bash
# Проверка и мониторинг бэкапов с использованием CLI
cd /var/www/bitrix
# Получить количество бэкапов
BACKUP_COUNT=$(php bitrix.php backup:list --limit=0 2>/dev/null | grep -c ".tar")
echo "Количество бэкапов: $BACKUP_COUNT"
if [ $BACKUP_COUNT -eq 0 ]; then
echo "⚠ ВНИМАНИЕ: Резервные копии отсутствуют!" | \
mail -s "No Backups Found" admin@example.com
else
echo "✓ Резервные копии найдены: $BACKUP_COUNT"
fiРотация бэкапов
#!/bin/bash
# Продвинутая ротация бэкапов с использованием CLI
cd /var/www/bitrix
# Сохранить:
# - Все бэкапы за последнюю неделю
# - Еженедельные бэкапы за последний месяц
# - Ежемесячные бэкапы за последний год
# Удалить ежедневные бэкапы старше 7 дней
php bitrix.php backup:clean --pattern="daily_*" --days=7 --force
# Удалить еженедельные бэкапы старше 30 дней
php bitrix.php backup:clean --pattern="weekly_*" --days=30 --force
# Удалить месячные бэкапы старше 365 дней
php bitrix.php backup:clean --pattern="monthly_*" --days=365 --force
echo "Ротация бэкапов завершена"Копирование на удаленный сервер
#!/bin/bash
# Копирование бэкапов на удаленный сервер
BACKUP_DIR="/var/www/bitrix/backup"
REMOTE_SERVER="backup@backup-server.com"
REMOTE_DIR="/backups/bitrix"
# Найти бэкапы за сегодня
TODAY=$(date +%Y%m%d)
for backup in "$BACKUP_DIR"/*$TODAY*.tar.gz; do
if [ -f "$backup" ]; then
echo "Копирование: $(basename $backup)"
rsync -avz --progress "$backup" "$REMOTE_SERVER:$REMOTE_DIR/"
if [ $? -eq 0 ]; then
echo "✓ $(basename $backup) скопирован"
else
echo "✗ Ошибка копирования $(basename $backup)"
fi
fi
doneЗагрузка в облачное хранилище
#!/bin/bash
# Загрузка бэкапов в S3-совместимое хранилище
BACKUP_DIR="/var/www/bitrix/backup"
S3_BUCKET="s3://my-bitrix-backups"
# Найти последний бэкап
LATEST_BACKUP=$(ls -t "$BACKUP_DIR"/*.tar.gz | head -1)
if [ -n "$LATEST_BACKUP" ]; then
echo "Загрузка в облако: $(basename $LATEST_BACKUP)"
# Использовать aws-cli или s3cmd
aws s3 cp "$LATEST_BACKUP" "$S3_BUCKET/" --storage-class STANDARD_IA
if [ $? -eq 0 ]; then
echo "✓ Бэкап загружен в облако"
else
echo "✗ Ошибка загрузки в облако"
fi
fibackup:list
Показывает список всех созданных резервных копий.
Синтаксис
php bitrix.php backup:list [опции]Опции
--sort=<тип>- сортировка списка:date- по дате создания (по умолчанию, новые первыми)size- по размеру файла (большие первыми)name- по имени файла (алфавитный порядок)
--limit=<число>- ограничить количество отображаемых бэкапов (0 - без ограничений, по умолчанию: 0)
Примеры использования
# Показать все бэкапы
php bitrix.php backup:list
# Показать 10 последних бэкапов
php bitrix.php backup:list --limit=10
# Отсортировать по размеру
php bitrix.php backup:list --sort=size
# Отсортировать по имени
php bitrix.php backup:list --sort=name
# Показать 5 самых больших бэкапов
php bitrix.php backup:list --sort=size --limit=5Вывод команды
Команда отображает таблицу со следующей информацией:
- Имя файла резервной копии
- Размер файла
- Дата и время создания
- Общий размер всех бэкапов
backup:restore
Восстанавливает сайт из резервной копии.
⚠️ ВНИМАНИЕ: Эта операция удалит текущие данные! Используйте с осторожностью.
Синтаксис
php bitrix.php backup:restore <архив> [опции]Аргументы
<архив>- имя файла архива для восстановления (обязательный параметр)
Опции
--skip-db- не восстанавливать базу данных (только файлы)--skip-files- не восстанавливать файлы (только БД)--force,-f- пропустить запрос подтверждения (использовать с осторожностью)--max-exec-time=<секунды>- длительность шага в секундах (по умолчанию: 300)
Примеры использования
# Полное восстановление (файлы + БД) с подтверждением
php bitrix.php backup:restore backup_20241028.tar.gz
# Восстановить только файлы (без БД)
php bitrix.php backup:restore backup_20241028.tar.gz --skip-db
# Восстановить только базу данных (без файлов)
php bitrix.php backup:restore backup_20241028.tar.gz --skip-files
# Восстановление без подтверждения (для автоматизации)
php bitrix.php backup:restore backup_20241028.tar.gz --force
# С увеличенным временем выполнения
php bitrix.php backup:restore backup_20241028.tar.gz --max-exec-time=600Процесс восстановления
- Проверка существования архива
- Отображение информации об архиве (размер, дата создания)
- Запрос подтверждения (если не указан
--force) - Извлечение файлов из архива (если не указан
--skip-files) - Восстановление базы данных (если не указан
--skip-db) - Вывод рекомендаций по пост-обработке
Рекомендации после восстановления
После успешного восстановления рекомендуется:
- Очистить кеш:
php bitrix.php cache:clear - Проверить работу сайта
- Проверить права доступа к файлам
Скрипт для автоматического восстановления
#!/bin/bash
# Автоматическое восстановление из последнего бэкапа
cd /var/www/bitrix
# Найти последний бэкап
LATEST_BACKUP=$(ls -t bitrix/backup/*.tar.gz 2>/dev/null | head -1)
if [ -z "$LATEST_BACKUP" ]; then
echo "✗ Бэкапы не найдены"
exit 1
fi
echo "Восстановление из: $(basename $LATEST_BACKUP)"
# Восстановить
php bitrix.php backup:restore "$(basename $LATEST_BACKUP)" --force
if [ $? -eq 0 ]; then
echo "✓ Восстановление завершено"
# Очистить кеш
php bitrix.php cache:clear
echo "✓ Кеш очищен"
else
echo "✗ Ошибка восстановления"
exit 1
fibackup:clean
Удаляет старые резервные копии по заданным критериям (ротация бэкапов).
Синтаксис
php bitrix.php backup:clean [опции]Опции
--days=<дни>,-d- удалить бэкапы старше указанного количества дней--keep=<число>,-k- оставить указанное количество последних бэкапов--pattern=<шаблон>,-p- шаблон имени файла (например:daily_*,weekly_*)--force,-f- пропустить запрос подтверждения--dry-run- показать что будет удалено, но не удалять (предварительный просмотр)
Примеры использования
# Удалить бэкапы старше 7 дней
php bitrix.php backup:clean --days=7
# Оставить только 5 последних бэкапов
php bitrix.php backup:clean --keep=5
# Удалить ежедневные бэкапы старше 7 дней
php bitrix.php backup:clean --pattern="daily_*" --days=7
# Предварительный просмотр (без удаления)
php bitrix.php backup:clean --days=30 --dry-run
# Оставить 10 последних бэкапов без подтверждения
php bitrix.php backup:clean --keep=10 --force
# Комбинация: оставить минимум 3, удалить старше 30 дней
php bitrix.php backup:clean --keep=3 --days=30
# Удалить старые еженедельные бэкапы
php bitrix.php backup:clean --pattern="weekly_*" --days=30Стратегии ротации
Простая ротация по времени
#!/bin/bash
# Удалить бэкапы старше 7 дней, оставить минимум 3
cd /var/www/bitrix
php bitrix.php backup:clean --days=7 --keep=3 --forceДифференцированная ротация
#!/bin/bash
# Разные правила для разных типов бэкапов
cd /var/www/bitrix
# Ежедневные - хранить 7 дней
php bitrix.php backup:clean --pattern="daily_*" --days=7 --force
# Еженедельные - хранить 30 дней
php bitrix.php backup:clean --pattern="weekly_*" --days=30 --force
# Месячные - хранить 365 дней
php bitrix.php backup:clean --pattern="monthly_*" --days=365 --force
echo "Ротация бэкапов завершена"Ротация с контролем места
#!/bin/bash
# Удалить старые бэкапы если мало места
cd /var/www/bitrix
# Проверить свободное место (в процентах)
DISK_USAGE=$(df /var/www | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 80 ]; then
echo "Диск заполнен на ${DISK_USAGE}%, выполняется очистка старых бэкапов"
# Оставить только 3 последних бэкапа
php bitrix.php backup:clean --keep=3 --force
echo "Очистка завершена"
fiВосстановление из бэкапа
Через CLI (рекомендуется)
# 1. Посмотреть доступные бэкапы
php bitrix.php backup:list
# 2. Восстановить нужный бэкап
php bitrix.php backup:restore backup_20241028.tar.gz
# 3. Очистить кеш после восстановления
php bitrix.php cache:clearЧерез админ-панель
- Перейдите в раздел Настройки → Инструменты → Резервное копирование
- Выберите архив для восстановления
- Настройте параметры восстановления
- Запустите процесс восстановления
Troubleshooting
Бэкап не создается
Проблема: Ошибка при создании бэкапа
Решения:
- Проверьте права доступа к
/bitrix/backup/:ls -la /bitrix/backup/ - Проверьте свободное место на диске:
df -h - Увеличьте
max_execution_timeв php.ini - Увеличьте
memory_limitв php.ini - Проверьте логи PHP
Недостаточно места на диске
Проблема: No space left on device
Решения:
- Освободите место: удалите старые бэкапы
- Используйте исключения для уменьшения размера
- Используйте
--max-file-sizeдля исключения больших файлов - Переместите бэкапы на другой диск
Бэкап занимает слишком много времени
Проблема: Создание бэкапа длится часами
Решения:
- Используйте
--skip-stat --skip-searchдля ускорения - Исключите большие директории:
--exclude-dir=/upload - Увеличьте
--max-exec-time - Уменьшите
--archive-size-limit - Запускайте в периоды низкой нагрузки
Ошибка целостности архива
Проблема: Integrity check failed
Решения:
- Пересоздайте бэкап
- Проверьте диск на ошибки
- Используйте
--no-integrity-check(не рекомендуется) - Проверьте свободное место во время создания
Полезные советы
💡 Автоматизируйте - настройте регулярное создание бэкапов через cron
💡 Используйте backup:list - регулярно проверяйте список созданных бэкапов
💡 Тестируйте восстановление - используйте backup:restore на тестовом окружении
💡 Используйте backup:clean - настройте автоматическую ротацию старых бэкапов
💡 Храните off-site - копируйте бэкапы на удаленный сервер или в облако
💡 Используйте --dry-run - проверяйте что будет удалено перед очисткой бэкапов
💡 Мониторьте - отслеживайте успешность создания бэкапов и их количество
💡 Оптимизируйте - исключайте ненужные данные для уменьшения размера и времени
💡 Документируйте - ведите журнал бэкапов и процедур восстановления
💡 Используйте сжатие - сжатие значительно уменьшает размер архива
💡 Разделяйте - используйте разные стратегии для разных типов данных (daily, weekly, monthly)
💡 Комбинируйте критерии - используйте --days и --keep вместе для гибкой ротации
Смотрите также
- Команды базы данных - информация о БД для планирования бэкапов
- Примеры cron - автоматизация создания бэкапов
- Официальная документация Битрикс по резервному копированию