wphow.ru wordpress WPHow

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

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

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

Плагины для резервного копирования удобны, но они:

  • Могут замедлять работу сайта, особенно при больших объёмах данных;
  • Иногда конфликтуют с другими плагинами или темами;
  • Не всегда дают полный контроль над процессом и местом хранения копий;
  • Зависимы от обновлений и поддержки разработчиков.

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

Основные компоненты резервного копирования WordPress

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

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

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

Создание дампа базы данных

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

mysqldump -u DB_USER -pDB_PASSWORD DB_NAME > /path/to/backup/db_backup.sql

В PHP это можно реализовать так:

function wphow_backup_create_db_dump() {
    $db_user = DB_USER;
    $db_password = DB_PASSWORD;
    $db_name = DB_NAME;
    $backup_dir = __DIR__ . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $filename = $backup_dir . '/db_backup_' . date('Y-m-d_H-i-s') . '.sql';
    $command = "mysqldump -u $db_user -p$db_password $db_name > $filename";
    exec($command, $output, $return_var);
    if ($return_var !== 0) {
        error_log('WPHow: Ошибка создания дампа базы данных');
    }
    return $filename;
}

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

Архивирование файлов сайта

Для создания архива файлов используем встроенный класс ZipArchive в PHP. Ниже пример функции, которая добавляет все файлы из корня сайта в ZIP-архив:

function wphow_backup_create_files_zip() {
    $root_path = ABSPATH; // Корневая папка WordPress
    $backup_dir = __DIR__ . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $zip_filename = $backup_dir . '/files_backup_' . date('Y-m-d_H-i-s') . '.zip';
    $zip = new ZipArchive();
    if ($zip->open($zip_filename, ZipArchive::CREATE) !== TRUE) {
        error_log('WPHow: Не удалось создать ZIP-архив');
        return false;
    }
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($root_path),
        RecursiveIteratorIterator::LEAVES_ONLY
    );
    foreach ($files as $name => $file) {
        if (!$file->isDir()) {
            $filePath = $file->getRealPath();
            $relativePath = substr($filePath, strlen($root_path));
            $zip->addFile($filePath, $relativePath);
        }
    }
    $zip->close();
    return $zip_filename;
}

Эта функция создаст архив с актуальной датой и временем, включающий все файлы WordPress.

Автоматизация процесса через CRON

Чтобы бэкап создавался автоматически, нужно добавить задачу в CRON на сервере. Для этого:

  1. Создайте PHP-скрипт backup.php в корне сайта, который вызывает функции бэкапа и сохраняет результаты;
  2. Добавьте задание в CRON, которое будет запускать этот скрипт с нужной периодичностью.

Пример backup.php:

<?php
// Загрузка WordPress для доступа к константам и функциям
require_once(__DIR__ . '/wp-load.php');

$db_backup = wphow_backup_create_db_dump();
$files_backup = wphow_backup_create_files_zip();

// Логирование результатов
error_log("WPHow: Бэкап базы данных создан: $db_backup");
error_log("WPHow: Бэкап файлов создан: $files_backup");

Добавление задачи в CRON (пример для запуска ежедневно в 3:00 по серверному времени):

0 3 * * * /usr/bin/php /path/to/your/wordpress/backup.php

Путь к PHP и скрипту замените на актуальные для вашего сервера.

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

Хранение бэкапов

Не храните резервные копии в общедоступных папках сайта — создайте отдельную директорию вне корня веб-сервера или защитите папку .htaccess. Это предотвратит доступ посторонних к вашим бэкапам.

Очистка старых бэкапов

Чтобы не занимать слишком много места, добавьте в backup.php функцию удаления файлов старше определённого времени (например, 30 дней):

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

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

wphow_backup_clear_old(__DIR__ . '/backups');

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

Если вы планируете запускать бэкап скрипт через веб-запрос, обязательно добавьте проверку секретного ключа или IP, чтобы никто посторонний не мог запустить процесс. В случае CRON это не требуется, так как скрипт запускается локально.

Альтернативные варианты без плагинов

Если у вас нет доступа к CRON или mysqldump, можно создать PHP-скрипт с использованием функций mysqli для выгрузки базы. Но это менее эффективно и может нагружать сервер.

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

Выводы

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

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее