WordPress

Бэкап WordPress: база и wp-content в облако

Сайт на WordPress — это база MySQL и папка wp-content с загрузками, темами и плагинами. dbsend сохраняет и то и другое версиями в российском облаке: дамп — через WP-CLI или mysqldump, файлы — архивом. Всё запускается системным cron, а если бэкап не пришёл, вы получаете уведомление.

  • Данные в РФ
  • AES-256-GCM
  • Бесплатный тариф без карты
$ sudo -u www-data wp db export - --path=/var/www/site > /var/backups/wp/db.sql$ dbsend backup /var/backups/wp/db.sql -d 5a1c… -e mysql_dump✓ Версия v57 сохранена (id e3b2…, 36 МБ)  https://dbsend.ru/databases/5a1c…/snapshots$ tar --sort=name -cf - -C /var/www/site wp-content wp-config.php | gzip -n > /var/backups/wp/files.tar.gz$ dbsend backup /var/backups/wp/files.tar.gz -d 0c9d… -e generic_file✓ Версия v9 сохранена (id 4f7a…, 1.2 ГБ)

Почему одного плагина бэкапа бывает мало

Плагины вроде UpdraftPlus, BackWPup или All-in-One WP Migration делают своё дело хорошо: копия создаётся из админки, её можно отправить в облако, а восстановить сайт — в пару кликов. Если у вас нет SSH-доступа, это разумный выбор.

Но плагин работает внутри того самого WordPress, который вы защищаете. Расписание держится на WP-Cron, а он срабатывает только при посещениях сайта: на малопосещаемом сайте или при DISABLE_WP_CRON без системного cron копия просто не создаётся. Большой архив упирается в max_execution_time и лимит памяти PHP. А при взломе под удар попадают и плагины с их настройками доступа к хранилищу.

Бэкап на уровне сервера — дамп базы и архив wp-content по системному cron — не зависит от PHP и состояния сайта. И его легко контролировать снаружи: если копия не пришла, это видно, даже когда сам сайт лежит.

Что даёт dbsend для WordPress

Дамп базы с разбором таблиц

Дамп из wp db export или mysqldump загружается с типом mysql_dump. На тарифах от «Старт» в каждой версии видно таблицы wp_posts, wp_options, wp_postmeta и число строк, а diff показывает, что изменилось между версиями.

wp-content как файл с версиями

Архив загрузок, тем и плагинов хранится как generic_file: версии, метки, проверка SHA-256 при восстановлении. Внутрь архива dbsend не заглядывает — diff по отдельным файлам не строится.

Контроль расписания

Ожидаемый интервал и уведомления в Telegram или на email, если бэкап не пришёл вовремя (тарифы от «Старт»). Никакой зависимости от WP-Cron и посещаемости сайта.

Хранение вне сервера, в РФ

S3-совместимое облако в России и шифрование AES-256-GCM. На сервере нет ключей от бакета — только API-ключ dbsend, который можно ограничить одной базой и сроком действия.

Как это работает

Настройка: WP-CLI, архив, cron

Создайте в панели две базы: для дампа (mysql_dump) и для файлов (generic_file). Установите CLI (Node.js 22.12+) и выполните dbsend login от root — скрипт ниже запускается от root, а PHP-код WordPress выполняет от имени пользователя сайта.

  1. Скрипт бэкапа

    #!/usr/bin/env bash
    # /usr/local/bin/wp-backup.sh — запускается от root
    set -euo pipefail
    SITE=/var/www/site
    OUT=/var/backups/wp
    DB_ID=5a1c…        # база mysql_dump в dbsend
    FILES_ID=0c9d…     # база generic_file в dbsend
    mkdir -p "$OUT"
    
    # База: WP-CLI берёт доступы из wp-config.php; PHP работает от www-data, не от root
    sudo -u www-data wp db export - --path="$SITE" --single-transaction > "$OUT/db.sql"
    dbsend backup "$OUT/db.sql" -d "$DB_ID" -e mysql_dump -l "nightly-$(date +%F)"
    
    # Файлы: wp-content и wp-config.php без кэшей и архивов плагинов.
    # Сортировка и gzip -n дают одинаковый архив, если файлы не менялись.
    tar --sort=name --exclude='wp-content/cache' --exclude='wp-content/updraft' \
      -cf - -C "$SITE" wp-content wp-config.php | gzip -n > "$OUT/files.tar.gz"
    dbsend backup "$OUT/files.tar.gz" -d "$FILES_ID" -e generic_file
    
    rm -f "$OUT/db.sql" "$OUT/files.tar.gz"

    wp-config.php содержит пароль базы и ключи — в dbsend он хранится зашифрованным, но API-ключ с доступом к этой базе выдавайте только тем, кому можно его видеть. Если tar завершается ошибкой из-за файлов, изменившихся во время чтения (например, логов), исключите их через --exclude.

  2. Без WP-CLI: mysqldump

    # Доступы — в /root/.my.cnf (chmod 600). Значения возьмите из wp-config.php:
    # DB_NAME, DB_USER, DB_PASSWORD, DB_HOST.
    mysqldump --single-transaction --quick --default-character-set=utf8mb4 \
      --no-tablespaces wordpress > /var/backups/wp/db.sql
    dbsend backup /var/backups/wp/db.sql -d 5a1c… -e mysql_dump
  3. Расписание cron

    # crontab -e (root): каждую ночь в 04:10
    10 4 * * * /usr/local/bin/wp-backup.sh >> /var/log/wp-backup.log 2>&1

    Магазину на WooCommerce дамп базы полезно снимать чаще, чем архив файлов: вынесите его в отдельный скрипт с более частым расписанием. Минимальный ожидаемый интервал для контроля расписания: «Бесплатный» — раз в сутки, «Старт» — раз в 6 часов, «Про» — раз в час, «Команда» — раз в 5 минут.

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

    dbsend restore <id версии дампа> /var/backups/wp/db.sql --yes
    sudo -u www-data wp db import /var/backups/wp/db.sql --path=/var/www/staging
    
    dbsend restore <id версии архива> /var/backups/wp/files.tar.gz --yes
    tar -xzf /var/backups/wp/files.tar.gz -C /var/www/staging
    
    # если тестовая копия на другом домене
    sudo -u www-data wp search-replace 'https://example.ru' 'https://staging.example.ru' \
      --skip-columns=guid --path=/var/www/staging

    CLI сверяет SHA-256 скачанного файла. wp-config.php из архива перезапишет настройки тестовой копии — поправьте в нём DB_NAME и доступы к тестовой базе.

UpdraftPlus или dbsend: честное сравнение

UpdraftPlus — самый популярный плагин бэкапа WordPress. Уже в бесплатной версии он делает копии по расписанию, отправляет их в облачные хранилища (Google Drive, Dropbox, Amazon S3 и другие) и восстанавливает сайт из админки. Если у вас обычный виртуальный хостинг без SSH — выбирайте плагин: dbsend нужны терминал и Node.js.

dbsend выигрывает там, где важен контроль: копия создаётся системным cron и не зависит от WP-Cron и лимитов PHP, хранится в России, каждая версия видна в панели и через CLI, дамп можно сравнить с предыдущим, а пропущенный бэкап вызывает алерт.

Они не конфликтуют. Можно оставить UpdraftPlus для восстановления в один клик и добавить dbsend как независимую внешнюю копию. Только исключите папку wp-content/updraft из архива — иначе каждая версия будет включать предыдущие архивы плагина.

Плагин бэкапа или dbsend

  • Работает без SSH, из админки

    Плагин (UpdraftPlus и др.)
    dbsend
  • Восстановление сайта

    Плагин (UpdraftPlus и др.)
    в один клик из админки
    dbsend
    CLI или скачивание из панели
  • Запуск не зависит от WP-Cron и PHP

    Плагин (UpdraftPlus и др.)
    dbsend
  • Хранение в РФ

    Плагин (UpdraftPlus и др.)
    зависит от выбранного облака
    dbsend
    S3 в РФ, AES-256-GCM
  • Версии с метками и закреплением

    Плагин (UpdraftPlus и др.)
    набор архивов
    dbsend
    v1…vN, метки, закрепление
  • Таблицы и diff дампа между версиями

    Плагин (UpdraftPlus и др.)
    dbsend
    от «Старт»
  • Алерт, если бэкап не пришёл

    Плагин (UpdraftPlus и др.)
    зависит от плагина
    dbsend
    Telegram и email, от «Старт»
  • Стоимость

    Плагин (UpdraftPlus и др.)
    бесплатно, расширенные функции — платно
    dbsend
    от 0 ₽

Тарифы и лимиты — на странице «Тарифы». Документация: CLI, форматы файлов, тарифы и лимиты.

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

Нужно ли удалять плагин бэкапа?

Нет. dbsend работает на уровне сервера и не мешает плагинам. Многие оставляют плагин для быстрого восстановления из админки, а dbsend используют как независимую копию вне сервера с версиями и алертами.

Что должно входить в бэкап WordPress?

База данных (записи, страницы, настройки, пользователи, заказы WooCommerce) и папка wp-content: загрузки, темы и плагины. Ядро WordPress можно скачать заново, а вот wp-config.php с доступами и ключами стоит хранить в копии — в скрипте выше он добавлен в архив.

Можно ли так бэкапить WordPress на хостинге без SSH?

Напрямую — нет: dbsend запускается из терминала. Без SSH используйте плагин. Если SSH есть, но нет Node.js 22.12+, снимайте дамп и архив на хостинге, а CLI запускайте на другой машине, куда копируете файлы.

Покажет ли dbsend, какие файлы изменились в wp-content?

Нет. Архив хранится как generic_file: версии, размер и SHA-256 без разбора содержимого. Таблицы, число строк и diff доступны для дампа базы.

Что делать, если wp-content больше лимита файла?

Лимит на файл: «Бесплатный» — 100 МБ, «Старт» — 500 МБ, «Про» — 2 ГБ, «Команда» — 2 ГБ. WordPress раскладывает загрузки по годам — архивируйте wp-content/uploads/2025, 2026 и т. д. отдельно, каждый архив в свою базу dbsend. Старые годы меняются редко, и при воспроизводимом архиве новые версии для них не создаются.

Как часто делать бэкап WordPress?

Блогу обычно хватает ежедневного дампа и еженедельного архива файлов, магазину — дампа каждые несколько часов. Загрузок в день: «Бесплатный» — 5, «Старт» — 50, «Про» — 200, «Команда» — 1 000. Если файл не изменился, новая версия не создаётся.

Статьи по теме

Все статьи →

Другие сценарии

Независимая копия WordPress — за вечер

Бесплатный тариф: 1 база, 500 МБ и 3 версии, карта не нужна. Начните с дампа базы, файлы добавите позже.