wpwebsite.ru wordpress WPWebSite

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

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

Почему важен автоматический бэкап WordPress

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

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

Кроме того, автоматический бэкап полезен для тестирования обновлений и миграции сайта на другой сервер.

Популярные плагины для автоматического бэкапа WordPress

Для автоматизации резервного копирования существуют проверенные плагины. Вот несколько из них:

  • UpdraftPlus — один из самых популярных и функциональных плагинов. Позволяет делать бэкапы в облако (Google Drive, Dropbox, Amazon S3 и др.), настраивать расписание, восстанавливать сайт в пару кликов.
  • BackWPup — бесплатный плагин с возможностью создавать бэкапы файлов и базы данных, отправлять их на FTP или облачные сервисы.
  • WPvivid Backup Plugin — удобный инструмент с функцией миграции сайта и планировщиком заданий.

Для настройки автоматического бэкапа через плагин обычно достаточно установить его, подключить облачное хранилище и задать расписание. Рассмотрим пример на UpdraftPlus.

Пример настройки UpdraftPlus для автоматического бэкапа

1. Установите и активируйте плагин через админку WordPress.

2. Перейдите в Настройки → UpdraftPlus Backups.

3. Вкладка Настройки: выберите периодичность бэкапа файлов и базы данных (например, ежедневно или еженедельно).

4. В разделе Выбор удалённого хранилища подключите Google Drive или другой сервис.

5. Сохраните настройки и запустите первый бэкап вручную, чтобы проверить работу.

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

Как создать собственный автоматический бэкап WordPress на PHP и WP Cron

Если вы хотите создать кастомное решение без плагинов, можно написать свой код для автоматического бэкапа с помощью WP Cron. Это позволит гибко настраивать задачи под свои нужды, например, сохранять бэкапы на сервере или отправлять по email.

Основные этапы:

  • Создать функцию, которая сделает дамп базы данных и скопирует нужные файлы.
  • Запланировать запуск этой функции с помощью WP Cron.
  • Обеспечить хранение бэкапов и очистку старых копий.

Пример функции для резервного копирования базы данных

function wpwebsite_backup_database() {
    global $wpdb;
    $tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
    $backup_sql = '';
    foreach ($tables as $table) {
        $table_name = $table[0];
        $create_table = $wpdb->get_row("SHOW CREATE TABLE $table_name", ARRAY_N);
        $backup_sql .= "\n\n-- Table structure for $table_name\n\n";
        $backup_sql .= $create_table[1] . ";\n\n";
        $rows = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);
        foreach ($rows as $row) {
            $vals = array_map(function($val) use ($wpdb) {
                return isset($val) ? "'" . esc_sql($val) . "'" : 'NULL';
            }, $row);
            $backup_sql .= "INSERT INTO $table_name VALUES (" . implode(',', $vals) . ");\n";
        }
    }
    $filename = WP_CONTENT_DIR . '/backups/db-backup-' . date('Y-m-d-H-i-s') . '.sql';
    file_put_contents($filename, $backup_sql);
}

Данная функция создаёт дамп всех таблиц базы данных и сохраняет его в папку wp-content/backups с отметкой времени в имени файла.

Запланируем запуск бэкапа через WP Cron

function wpwebsite_schedule_backup() {
    if (!wp_next_scheduled('wpwebsite_daily_backup_event')) {
        wp_schedule_event(time(), 'daily', 'wpwebsite_daily_backup_event');
    }
}
add_action('wp', 'wpwebsite_schedule_backup');

add_action('wpwebsite_daily_backup_event', 'wpwebsite_backup_database');

Этот код проверяет, запланировано ли событие ежедневного бэкапа, и если нет — создаёт его. Затем в указанное время вызывается функция резервного копирования базы данных.

Копирование файлов сайта

Для полного бэкапа нужно сохранять не только базу, но и файлы темы, плагинов, загрузок. Пример простой функции для архивации папки wp-content/uploads в ZIP-архив:

function wpwebsite_backup_uploads_folder() {
    $uploads_dir = WP_CONTENT_DIR . '/uploads';
    $zip = new ZipArchive();
    $zip_filename = WP_CONTENT_DIR . '/backups/uploads-backup-' . date('Y-m-d-H-i-s') . '.zip';
    if ($zip->open($zip_filename, ZipArchive::CREATE) === TRUE) {
        $files = new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($uploads_dir),
            RecursiveIteratorIterator::LEAVES_ONLY
        );
        foreach ($files as $name => $file) {
            if (!$file->isDir()) {
                $filePath = $file->getRealPath();
                $relativePath = substr($filePath, strlen($uploads_dir) + 1);
                $zip->addFile($filePath, $relativePath);
            }
        }
        $zip->close();
    }
}

Вы можете дополнять функцию wpwebsite_backup_database вызовом этой функции для создания полного архива.

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

Создавая бэкапы, важно правильно организовать их хранение:

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

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

function wpwebsite_cleanup_backups($days = 7) {
    $backup_dir = WP_CONTENT_DIR . '/backups';
    $files = glob($backup_dir . '/*');
    $now = time();
    foreach ($files as $file) {
        if (is_file($file)) {
            if ($now - filemtime($file) > $days * 86400) {
                unlink($file);
            }
        }
    }
}
add_action('wpwebsite_daily_backup_event', function() {
    wpwebsite_cleanup_backups();
});

Заключение

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

×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙