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

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

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

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

  • Загрузка сервера и увеличение времени отклика сайта.
  • Зависимость от стороннего кода и обновлений.
  • Ограничения на хостинге, где запрещена установка некоторых плагинов.

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

Что нужно для резервного копирования WordPress

Для полноценного бэкапа важно сохранить две основные части:

  1. Файлы сайта — темы, плагины, медиа и т.д.
  2. Базу данных — все записи, настройки, контент.

Далее разберём, как сделать резервное копирование каждого компонента и объединить их в один архив.

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

Ниже представлен пример простого скрипта, который создаёт дамп базы данных и архивирует файлы сайта в zip-архив.

<?php
// Настройки подключения к базе данных
$db_host = 'localhost';
$db_name = 'your_db_name';
$db_user = 'your_db_user';
$db_pass = 'your_db_password';

// Пути
$backup_dir = __DIR__ . '/wp-backups';
$backup_date = date('Y-m-d_H-i-s');

if (!file_exists($backup_dir)) {
    mkdir($backup_dir, 0755, true);
}

// Файл для дампа базы
$sql_file = "$backup_dir/db-backup-$backup_date.sql";

// Функция для создания дампа базы (mysqldump должен быть доступен)
function wpbox_create_db_backup($db_host, $db_user, $db_pass, $db_name, $sql_file) {
    $command = "mysqldump --host=$db_host --user=$db_user --password=$db_pass $db_name > $sql_file";
    system($command, $output);
    return file_exists($sql_file);
}

// Создаём дамп базы
if (!wpbox_create_db_backup($db_host, $db_user, $db_pass, $db_name, $sql_file)) {
    die('Ошибка создания дампа базы данных');
}

// Создаём zip-архив с файлами сайта и дампом
$zip_file = "$backup_dir/wp-backup-$backup_date.zip";
$zip = new ZipArchive();

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

// Добавляем файлы сайта
function wpbox_add_folder_to_zip($folder, $zip, $baseFolder) {
    $files = scandir($folder);
    foreach ($files as $file) {
        if ($file === '.' || $file === '..') continue;
        $filePath = "$folder/$file";
        $localPath = substr($filePath, strlen($baseFolder) + 1);
        if (is_dir($filePath)) {
            wpbox_add_folder_to_zip($filePath, $zip, $baseFolder);
        } else {
            $zip->addFile($filePath, $localPath);
        }
    }
}

$site_root = __DIR__; // Корень сайта
wpbox_add_folder_to_zip($site_root, $zip, $site_root);

// Добавляем дамп базы в архив
$zip->addFile($sql_file, basename($sql_file));

$zip->close();

// Удаляем временный файл дампа
unlink($sql_file);

echo "Резервное копирование успешно создано: $zip_file";
?>

Этот скрипт следует сохранить, например, как backup.php в корне сайта.

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

Для автоматизации нужно добавить задачу в Cron, которая будет запускать скрипт по расписанию. Например, для ежедневного запуска в 3 часа ночи:

0 3 * * * /usr/bin/php /path/to/your/site/backup.php >/dev/null 2>&1

Обязательно укажите полный путь до PHP и скрипта. Если у вашего хостинга есть панель управления, настройка Cron обычно доступна в разделе «Задачи Cron».

Дополнительные рекомендации и улучшения

Отправка архива на удалённый сервер или облако

Чтобы повысить надёжность, можно настроить отправку созданного архива на удалённый FTP, SFTP-сервер или в облачное хранилище (Google Drive, Dropbox) с помощью соответствующих библиотек или утилит командной строки.

Ограничение количества хранимых резервных копий

Для экономии места на диске имеет смысл удалять старые архивы. Например, можно добавить в скрипт функцию удаления файлов старше 30 дней:

function wpbox_cleanup_old_backups($backup_dir, $days = 30) {
    $files = glob("$backup_dir/*.zip");
    $now = time();
    foreach ($files as $file) {
        if ($now - filemtime($file) >= 60 * 60 * 24 * $days) {
            unlink($file);
        }
    }
}

И вызвать её в конце скрипта:

wpbox_cleanup_old_backups($backup_dir);

Безопасность

Резервные копии содержат всю информацию сайта, поэтому доступ к скрипту должен быть ограничен. Лучше запускать его только через Cron и не делать доступным из браузера. Например, защитить .htaccess или поместить скрипт вне веб-доступа.

Использование плагинов WPShop для резервного копирования

Если всё же захотите использовать плагин, обратите внимание на Clearfy Pro — в нем есть опции для оптимизации и некоторых резервных функций. Но для полного контроля и минимальной нагрузки вышеописанный метод будет предпочтительнее.

Итоги

Создание собственного автоматического резервного копирования WordPress без плагинов — задача вполне решаемая и очень полезная. Вы получаете лёгкое, гибкое и надёжное решение, контролируете процесс и не зависите от сторонних компонентов. Главное — правильно настроить скрипт, Cron и обеспечить безопасность. Надеюсь, пример кода и советы помогут вам реализовать такую систему на своём сайте.

Как установить уникальные виджеты в WordPress для каждого шаблона
07.04.2026
WordPress: как изменить URL авторской страницы
13.11.2025
Как добавить уникальные метатеги для каждого типа записи в WordPress
21.12.2025
Как удалить неиспользуемые медиа файлы в WordPress
20.01.2026
Автоматическое удаление старого метаданных в WordPress
10.04.2026