Skip to content

Команды резервного копирования

Команды для управления резервными копиями сайта средствами Битрикса.


backup:create

Создает резервную копию сайта средствами Битрикса (файлы + база данных).

Синтаксис

bash
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 без сжатия).


Примеры использования

Основные примеры

bash
# Полный бэкап (файлы + БД) с параметрами по умолчанию
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

Исключения из базы данных

bash
# Исключить статистику из БД (таблицы 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

Исключения файлов и директорий

bash
# С исключением директорий
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

Экспертные настройки

bash
# Настройка длительности шагов (по умолчанию 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

Комплексные примеры

bash
# Исключить кеш и временные файлы
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

Стратегии резервного копирования

Ежедневный полный бэкап

bash
#!/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"

Еженедельный полный бэкап

bash
#!/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"

Только база данных (часто)

bash
#!/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"

Бэкап перед обновлением

bash
#!/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

Дифференцированный бэкап

bash
#!/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

Базовая настройка

bash
# Полный бэкап каждый день в 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

Продвинутые сценарии

bash
#!/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

Управление бэкапами

Просмотр списка бэкапов

bash
#!/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

Проверка наличия бэкапов

bash
#!/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

Ротация бэкапов

bash
#!/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 "Ротация бэкапов завершена"

Копирование на удаленный сервер

bash
#!/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

Загрузка в облачное хранилище

bash
#!/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
fi

backup:list

Показывает список всех созданных резервных копий.

Синтаксис

bash
php bitrix.php backup:list [опции]

Опции

  • --sort=<тип> - сортировка списка:
    • date - по дате создания (по умолчанию, новые первыми)
    • size - по размеру файла (большие первыми)
    • name - по имени файла (алфавитный порядок)
  • --limit=<число> - ограничить количество отображаемых бэкапов (0 - без ограничений, по умолчанию: 0)

Примеры использования

bash
# Показать все бэкапы
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

Восстанавливает сайт из резервной копии.

⚠️ ВНИМАНИЕ: Эта операция удалит текущие данные! Используйте с осторожностью.

Синтаксис

bash
php bitrix.php backup:restore <архив> [опции]

Аргументы

  • <архив> - имя файла архива для восстановления (обязательный параметр)

Опции

  • --skip-db - не восстанавливать базу данных (только файлы)
  • --skip-files - не восстанавливать файлы (только БД)
  • --force, -f - пропустить запрос подтверждения (использовать с осторожностью)
  • --max-exec-time=<секунды> - длительность шага в секундах (по умолчанию: 300)

Примеры использования

bash
# Полное восстановление (файлы + БД) с подтверждением
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

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

  1. Проверка существования архива
  2. Отображение информации об архиве (размер, дата создания)
  3. Запрос подтверждения (если не указан --force)
  4. Извлечение файлов из архива (если не указан --skip-files)
  5. Восстановление базы данных (если не указан --skip-db)
  6. Вывод рекомендаций по пост-обработке

Рекомендации после восстановления

После успешного восстановления рекомендуется:

  1. Очистить кеш: php bitrix.php cache:clear
  2. Проверить работу сайта
  3. Проверить права доступа к файлам

Скрипт для автоматического восстановления

bash
#!/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
fi

backup:clean

Удаляет старые резервные копии по заданным критериям (ротация бэкапов).

Синтаксис

bash
php bitrix.php backup:clean [опции]

Опции

  • --days=<дни>, -d - удалить бэкапы старше указанного количества дней
  • --keep=<число>, -k - оставить указанное количество последних бэкапов
  • --pattern=<шаблон>, -p - шаблон имени файла (например: daily_*, weekly_*)
  • --force, -f - пропустить запрос подтверждения
  • --dry-run - показать что будет удалено, но не удалять (предварительный просмотр)

Примеры использования

bash
# Удалить бэкапы старше 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

Стратегии ротации

Простая ротация по времени

bash
#!/bin/bash
# Удалить бэкапы старше 7 дней, оставить минимум 3

cd /var/www/bitrix

php bitrix.php backup:clean --days=7 --keep=3 --force

Дифференцированная ротация

bash
#!/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 "Ротация бэкапов завершена"

Ротация с контролем места

bash
#!/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 (рекомендуется)

bash
# 1. Посмотреть доступные бэкапы
php bitrix.php backup:list

# 2. Восстановить нужный бэкап
php bitrix.php backup:restore backup_20241028.tar.gz

# 3. Очистить кеш после восстановления
php bitrix.php cache:clear

Через админ-панель

  1. Перейдите в раздел Настройки → Инструменты → Резервное копирование
  2. Выберите архив для восстановления
  3. Настройте параметры восстановления
  4. Запустите процесс восстановления

Troubleshooting

Бэкап не создается

Проблема: Ошибка при создании бэкапа

Решения:

  1. Проверьте права доступа к /bitrix/backup/: ls -la /bitrix/backup/
  2. Проверьте свободное место на диске: df -h
  3. Увеличьте max_execution_time в php.ini
  4. Увеличьте memory_limit в php.ini
  5. Проверьте логи PHP

Недостаточно места на диске

Проблема: No space left on device

Решения:

  1. Освободите место: удалите старые бэкапы
  2. Используйте исключения для уменьшения размера
  3. Используйте --max-file-size для исключения больших файлов
  4. Переместите бэкапы на другой диск

Бэкап занимает слишком много времени

Проблема: Создание бэкапа длится часами

Решения:

  1. Используйте --skip-stat --skip-search для ускорения
  2. Исключите большие директории: --exclude-dir=/upload
  3. Увеличьте --max-exec-time
  4. Уменьшите --archive-size-limit
  5. Запускайте в периоды низкой нагрузки

Ошибка целостности архива

Проблема: Integrity check failed

Решения:

  1. Пересоздайте бэкап
  2. Проверьте диск на ошибки
  3. Используйте --no-integrity-check (не рекомендуется)
  4. Проверьте свободное место во время создания

Полезные советы

💡 Автоматизируйте - настройте регулярное создание бэкапов через cron

💡 Используйте backup:list - регулярно проверяйте список созданных бэкапов

💡 Тестируйте восстановление - используйте backup:restore на тестовом окружении

💡 Используйте backup:clean - настройте автоматическую ротацию старых бэкапов

💡 Храните off-site - копируйте бэкапы на удаленный сервер или в облако

💡 Используйте --dry-run - проверяйте что будет удалено перед очисткой бэкапов

💡 Мониторьте - отслеживайте успешность создания бэкапов и их количество

💡 Оптимизируйте - исключайте ненужные данные для уменьшения размера и времени

💡 Документируйте - ведите журнал бэкапов и процедур восстановления

💡 Используйте сжатие - сжатие значительно уменьшает размер архива

💡 Разделяйте - используйте разные стратегии для разных типов данных (daily, weekly, monthly)

💡 Комбинируйте критерии - используйте --days и --keep вместе для гибкой ротации


Смотрите также

Документация BXMax CLI