wpcoding.ru wordpress WP Coding

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

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

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

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

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

UpdraftPlus: простой и надежный

UpdraftPlus — один из самых популярных плагинов для создания резервных копий. Он позволяет автоматически создавать бэкапы базы данных и файлов, сохранять их на удаленных хранилищах (Google Drive, Dropbox, FTP и другие). Настраивается через удобный интерфейс.

  • Регулярность бэкапов можно задать от часов до недель.
  • Поддержка инкрементальных бэкапов.
  • Восстановление сайта в один клик.

BackWPup: расширенные возможности

BackWPup — мощный инструмент с большим количеством настроек. Кроме создания резервных копий, он умеет оптимизировать базу данных и отправлять отчеты на почту.

  • Создание архивов в формате ZIP, TAR.GZ и др.
  • Поддержка внешних хранилищ.
  • Запуск бэкапов по расписанию через Cron.

Как создать собственную функцию для автоматического бэкапа базы данных WordPress

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

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

function wpcoding_create_db_backup() {
    global $wpdb;
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $filename = 'db-backup-' . date('Y-m-d-His') . '.sql';
    $filepath = $backup_dir . '/' . $filename;

    // Получаем данные всех таблиц
    $tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
    $sql_dump = '';

    foreach ($tables as $table) {
        $table_name = $table[0];
        // Создаем структуру таблицы
        $create_table = $wpdb->get_row("SHOW CREATE TABLE $table_name", ARRAY_N);
        $sql_dump .= "DROP TABLE IF EXISTS `$table_name`;
" . $create_table[1] . ";

";

        // Получаем данные из таблицы
        $rows = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);
        foreach ($rows as $row) {
            $values = array_map(function($value) use ($wpdb) {
                return is_null($value) ? 'NULL' : $wpdb->_escape($value);
            }, array_values($row));
            $values = array_map(function($val) { return "'" . addslashes($val) . "'"; }, $values);
            $sql_dump .= "INSERT INTO `$table_name` VALUES(" . implode(',', $values) . ");
";
        }
        $sql_dump .= "
";
    }

    file_put_contents($filepath, $sql_dump);
}

// Запланируем запуск функции через WP-Cron ежедневно
add_action('wpcoding_daily_backup', 'wpcoding_create_db_backup');
function wpcoding_schedule_backup() {
    if (!wp_next_scheduled('wpcoding_daily_backup')) {
        wp_schedule_event(time(), 'daily', 'wpcoding_daily_backup');
    }
}
add_action('wp', 'wpcoding_schedule_backup');

Данный код создает полный дамп базы данных и сохраняет его в папку wp-content/backups. Также он регистрирует задание в WP-Cron для ежедневного запуска. Вы можете изменить частоту по своему усмотрению.

Автоматическое резервное копирование файлов сайта

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

Пример функции, которая создает ZIP-архив папки wp-content/uploads:

function wpcoding_backup_uploads_folder() {
    $uploads_dir = wp_get_upload_dir()['basedir'];
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $zip_path = $backup_dir . '/uploads-backup-' . date('Y-m-d-His') . '.zip';

    $zip = new ZipArchive();
    if ($zip->open($zip_path, ZipArchive::CREATE) === TRUE) {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($uploads_dir));
        foreach ($files as $name => $file) {
            if (!$file->isDir()) {
                $filePath = $file->getRealPath();
                $relativePath = substr($filePath, strlen($uploads_dir) + 1);
                $zip->addFile($filePath, $relativePath);
            }
        }
        $zip->close();
    }
}

Такую функцию тоже можно запускать по расписанию через WP-Cron, чтобы иметь актуальные архивы важных файлов.

Настройка уведомлений и хранение бэкапов

Создание резервных копий — это половина дела. Важно организовать удобное хранение и оповещения о статусе бэкапов. Рекомендуется:

  • Сохранять бэкапы на удаленных хранилищах (облако, FTP, S3).
  • Настроить удаление старых архивов, чтобы не переполнять сервер.
  • Отправлять уведомления на почту или в мессенджеры о результатах бэкапа.

Для отправки почтовых уведомлений можно использовать стандартную функцию wp_mail:

function wpcoding_send_backup_notification($success, $filepath) {
    $to = get_option('admin_email');
    $subject = $success ? 'Резервная копия WordPress создана' : 'Ошибка создания резервной копии WordPress';
    $message = $success ? "Бэкап успешно создан: $filepath" : "При создании бэкапа произошла ошибка.";
    wp_mail($to, $subject, $message);
}

Вызывайте эту функцию после операций бэкапа, передавая статус и путь к файлу.

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

Автоматические бэкапы должны быть частью любой стратегии поддержки WordPress-сайта. При реализации собственного решения следите за безопасностью:

  • Права доступа к папкам с бэкапами должны быть ограничены.
  • Не храните бэкапы в публично доступных папках.
  • Шифруйте или защищайте паролем архивы при возможности.

Использование проверенных плагинов упрощает задачу, но собственный код дает максимальную гибкость и контроль. Комбинируйте оба подхода для лучшей надежности.

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

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

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