Как создать автоматическую резервную копию 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
30.03.2026
Как удалить заблокированные или замороженные учётные записи пользователей в WordPress
18.05.2026
Как массово изменить title и meta description в WordPress без плагинов
07.05.2026
Использование WP GPT для автоматического создания контента в WordPress
01.01.2026
Как избежать конфликтов между плагинами в WordPress
06.03.2026