Автоматизация создания резервных копий WordPress без плагинов

Резервное копирование сайта на WordPress — жизненно важная задача для любого владельца ресурса. Многие предпочитают использовать плагины для создания бэкапов, но иногда это неудобно: плагины загружают систему, требуют обновлений и могут конфликтовать с другими компонентами сайта. В этой статье мы рассмотрим, как автоматизировать создание резервных копий WordPress без плагинов, используя системные инструменты и PHP-скрипты.

Почему резервное копирование WordPress без плагинов актуально

Плагины для бэкапов, такие как UpdraftPlus или BackWPup, очень популярны, но есть ситуации, когда стоит обойтись без них:

  • Ограниченные серверные ресурсы — плагины могут создавать значительную нагрузку.
  • Безопасность — минимизируем количество сторонних компонентов.
  • Гибкость — полностью контролируем процесс резервного копирования.
  • Автоматизация с помощью cron и скриптов позволяет интегрировать бэкапы в существующую инфраструктуру.

Именно для таких случаев полезно знать, как создавать собственные скрипты для резервного копирования WordPress.

Основные компоненты резервной копии WordPress

Чтобы сделать полноценный бэкап WordPress, нужно сохранить две важные части:

  1. Файлы сайта: темы, плагины, загрузки (папка wp-content), а также файлы ядра WordPress.
  2. База данных MySQL: все контентные данные, настройки, записи и метаданные хранятся здесь.

Без сохранения базы данных восстановить сайт практически невозможно, а сохранение только файлов — бесполезно для восстановления контента.

Как автоматизировать резервное копирование базы данных

Самый простой способ сделать дамп базы данных — использовать утилиту mysqldump. Для этого нужно знать данные подключения к базе, которые хранятся в файле wp-config.php.

Пример bash-скрипта для создания дампа базы:

#!/bin/bash
# Параметры базы данных
DB_NAME="wp_database"
DB_USER="wp_user"
DB_PASS="secure_password"
DB_HOST="localhost"

# Папка для бэкапов
BACKUP_DIR="/var/backups/wpguest"

# Имя файла с датой
DATE=$(date +"%Y-%m-%d_%H-%M-%S")

# Создаем папку, если нет
mkdir -p $BACKUP_DIR

# Создаем дамп базы
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db_backup_$DATE.sql

# Опционально: сжать файл
gzip $BACKUP_DIR/db_backup_$DATE.sql

Этот скрипт можно запускать вручную или настроить в cron для автоматического выполнения.

Резервное копирование файлов WordPress

Для копирования файлов сайта целесообразно использовать tar. Например, чтобы заархивировать директорию wp-content, где хранятся темы, плагины и загрузки:

#!/bin/bash
BACKUP_DIR="/var/backups/wpguest"
WP_PATH="/var/www/html/wpguest.ru"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")

mkdir -p $BACKUP_DIR

tar -czf $BACKUP_DIR/wp_content_backup_$DATE.tar.gz -C $WP_PATH wp-content

Можно расширить скрипт, чтобы архивировать и другие директории, например, корневую папку WordPress, исключая кэш и временные файлы.

Интеграция резервного копирования базы и файлов в один скрипт

Для удобства создадим полный bash-скрипт, который будет создавать бэкапы и базы, и файлов:

#!/bin/bash

# Параметры базы данных
DB_NAME="wp_database"
DB_USER="wp_user"
DB_PASS="secure_password"
DB_HOST="localhost"

# Пути
BACKUP_DIR="/var/backups/wpguest"
WP_PATH="/var/www/html/wpguest.ru"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")

mkdir -p $BACKUP_DIR

# Дамп базы
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db_backup_$DATE.sql
gzip $BACKUP_DIR/db_backup_$DATE.sql

# Архив wp-content
 tar -czf $BACKUP_DIR/wp_content_backup_$DATE.tar.gz -C $WP_PATH wp-content

# Архив остальных файлов (без wp-content)
 tar -czf $BACKUP_DIR/other_files_backup_$DATE.tar.gz -C $WP_PATH . --exclude=wp-content

Этот скрипт необходимо сделать исполняемым через chmod +x и добавить в cron:

# Запуск каждый день в 3:00
0 3 * * * /path/to/backup_script.sh

Создание PHP-скрипта для запуска резервного копирования из админки WordPress

Иногда полезно иметь возможность запускать резервное копирование прямо из панели управления WordPress без плагинов. Для этого можно добавить кастомный PHP-скрипт, который будет выполнять дамп базы и архивировать файлы.

Пример функции wpguest_backup_run для создания резервной копии базы данных из PHP:

function wpguest_backup_run() {
    global $wpdb;
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $date = date('Y-m-d_H-i-s');
    $backup_file = $backup_dir . "/db_backup_{$date}.sql";

    $dbname = DB_NAME;
    $dbuser = DB_USER;
    $dbpass = DB_PASSWORD;
    $dbhost = DB_HOST;

    $command = "mysqldump --user={$dbuser} --password={$dbpass} --host={$dbhost} {$dbname} > {$backup_file}";
    system($command, $retval);

    if ($retval === 0) {
        return "Резервная копия базы успешно создана: {$backup_file}";
    } else {
        return "Ошибка при создании резервной копии базы.";
    }
}

Для безопасности запускать такую функцию можно только после проверки прав текущего пользователя (например, администратора). Также можно добавить кнопку в админпанель для вызова этой функции.

Архивирование файлов WordPress через PHP

Используем встроенный класс ZipArchive для архивации папки wp-content/uploads. Пример функции wpguest_backup_files:

function wpguest_backup_files() {
    $upload_dir = wp_upload_dir()['basedir'];
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $date = date('Y-m-d_H-i-s');
    $zip_file = $backup_dir . "/uploads_backup_{$date}.zip";

    $zip = new ZipArchive();
    if ($zip->open($zip_file, ZipArchive::CREATE) !== TRUE) {
        return "Не удалось создать архив.";
    }

    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($upload_dir), RecursiveIteratorIterator::LEAVES_ONLY
    );

    foreach ($files as $name => $file) {
        if (!$file->isDir()) {
            $filePath = $file->getRealPath();
            $relativePath = substr($filePath, strlen($upload_dir) + 1);
            $zip->addFile($filePath, $relativePath);
        }
    }

    $zip->close();
    return "Архив файлов успешно создан: {$zip_file}";
}

Рекомендации по безопасности и хранению бэкапов

При автоматизации резервного копирования важно помнить о безопасности:

  • Храните бэкапы вне публичной директории сайта, чтобы избежать доступа извне.
  • Регулярно очищайте старые бэкапы, чтобы не занимать слишком много места.
  • По возможности копируйте бэкапы на удалённые хранилища (FTP, облако).
  • Защищайте скрипты резервного копирования от доступа неавторизованных пользователей.

Выводы и практические советы от WPGuest

Автоматизация резервного копирования WordPress без плагинов — отличное решение для продвинутых пользователей и разработчиков, позволяющее экономить ресурсы и иметь полный контроль над процессом. Используйте системные инструменты и PHP-скрипты, комбинируйте их с cron для регулярного выполнения. Важно соблюдать безопасность и регулярно проверять работоспособность созданных бэкапов.

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

Как удалить неиспользуемые круглые даты из WordPress
25.02.2026
Как удалить и заблокировать подозрительных пользователей в WordPress
24.05.2026
Автоматическое удаление возвращённых и отменённых заказов WooCommerce
02.07.2026
Как избежать ошибки 429 в WooCommerce при автообновлении корзины
19.04.2026
Как исключить отображение товаров с нулевым запасом в WooCommerce с помощью кода
04.05.2026