Как создать автоматическую резервную копию WordPress без плагинов

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

Почему стоит создавать резервные копии вручную через код и cron

Автоматизация резервного копирования с помощью плагинов удобна, но не всегда оптимальна. Плагины могут увеличить нагрузку, влиять на скорость сайта и иногда вызывают конфликты с другими расширениями. Кроме того, зависимость от плагинов — это еще один уровень риска, если разработчик перестанет поддерживать плагин.

Настройка собственного скрипта резервного копирования позволяет:

  • Контролировать, какие именно данные и файлы копируются.
  • Оптимизировать процесс под нужды вашего хостинга.
  • Избежать лишних зависимостей.
  • Автоматизировать процесс через системный cron, что надежнее и эффективнее.

Как правило, для сайта WordPress важны две части: база данных и папка с файлами (wp-content, темы, плагины и т.д.). Мы разберем, как создавать копии и тех, и других.

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

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

function wptips_backup_database() {
    $db_name = DB_NAME;
    $db_user = DB_USER;
    $db_pass = DB_PASSWORD;
    $db_host = DB_HOST;

    // Путь для сохранения резервной копии
    $backup_dir = __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";

    // Формируем команду для mysqldump
    $command = "mysqldump --user=$db_user --password=$db_pass --host=$db_host $db_name > $backup_file";

    exec($command, $output, $return_var);

    if ($return_var !== 0) {
        error_log("[wptips_backup_database] Ошибка создания резервной копии базы данных");
        return false;
    }

    return $backup_file;
}

Обратите внимание, что в этом примере используются константы WordPress из wp-config.php. Этот скрипт можно положить, например, в отдельный файл backup.php в корне сайта.

Копирование файлов WordPress с помощью PHP

Резервное копирование папки с файлами — более ресурсоемкий процесс, особенно если сайт большой. Чтобы избежать длительных зависаний, лучше архивировать папку с помощью системной команды tar или zip. Пример создания архива wp-content:

function wptips_backup_files() {
    $backup_dir = __DIR__ . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }

    $date = date('Y-m-d_H-i-s');
    $archive_file = "$backup_dir/wp-content_backup_$date.tar.gz";
    $source_dir = __DIR__ . '/wp-content';

    $command = "tar -czf $archive_file -C $source_dir .";

    exec($command, $output, $return_var);

    if ($return_var !== 0) {
        error_log("[wptips_backup_files] Ошибка создания архива wp-content");
        return false;
    }

    return $archive_file;
}

Важно, чтобы у PHP было право выполнять команды и читать нужные файлы.

Объединяем резервное копирование базы и файлов

Теперь создадим функцию, которая запустит обе операции и соберет результаты:

function wptips_create_full_backup() {
    $db_backup = wptips_backup_database();
    $files_backup = wptips_backup_files();

    if ($db_backup && $files_backup) {
        return [
            'database' => $db_backup,
            'files' => $files_backup
        ];
    }

    return false;
}

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

Настройка автоматического запуска с помощью cron

Чтобы автоматизировать создание бэкапов, используем системный планировщик задач cron. Пример записи в crontab для запуска скрипта каждую ночь в 3 часа:

0 3 * * * /usr/bin/php /путь/к/вашему/сайту/backup.php

Где backup.php — файл, в котором вызывается функция создания бэкапа, например:

<?php
require_once 'wp-load.php';

$result = wptips_create_full_backup();
if ($result) {
    echo "Резервная копия успешно создана:\n";
    echo "База данных: " . $result['database'] . "\n";
    echo "Файлы: " . $result['files'] . "\n";
} else {
    echo "Ошибка при создании резервной копии";
}
?>

Важно удостовериться, что PHP из командной строки использует тот же пользователь и окружение, что и веб-сервер, чтобы были доступны все нужные пути и права.

Дополнительные советы и рекомендации

Хранение и безопасность бэкапов

Не храните резервные копии в публичных папках сайта, чтобы избежать доступа извне. Лучше использовать папку вне веб-директории или настроить защиту через .htaccess. Также можно периодически переносить резервные копии на удаленный сервер или в облако.

Мониторинг и уведомления

Для контроля успешности бэкапов можно добавить отправку уведомлений на email или интеграцию с Telegram с помощью ботов. Это поможет вовремя узнавать об ошибках.

Оптимизация и очистка старых копий

Рекомендуется реализовать механизм удаления старых резервных копий, чтобы не переполнять диск. Например, хранить только последние 7 копий или копии за месяц.

Заключение

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

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

Как создать динамические формы в WordPress с помощью REST API
27.01.2026
Как использовать мета-записи для оптимизации WordPress
04.01.2026
Как создать автоматическую резервную копию WordPress без плагинов
09.01.2026
Как удалить старые ревизии постов в WordPress без плагинов
23.01.2026
Как создать собственный шорткод в WordPress: подробное руководство
31.10.2025