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

Почему важно автоматическое резервное копирование базы данных WordPress

База данных WordPress содержит всю важную информацию сайта: записи, страницы, настройки, комментарии и многое другое. Потеря или повреждение базы данных может привести к полной потере сайта или длительному простою. Поэтому автоматическое резервное копирование – одна из главных задач для любого администратора или разработчика.

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

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

Основные подходы к резервному копированию базы данных WordPress

Существует несколько способов организовать резервное копирование БД WordPress:

  • Использовать специализированные плагины, которые автоматизируют процесс и предлагают удобный интерфейс.
  • Настроить скрипты на PHP и CRON для регулярного создания дампов базы данных.
  • Применять инструменты хостинга, если они поддерживают автоматическое резервное копирование.

Рассмотрим второй вариант – реализацию собственного скрипта резервного копирования – подробно, так как он дает полный контроль и не зависит от сторонних решений.

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

1. Получение данных для подключения к базе из wp-config.php

Для подключения к базе нам нужны параметры из файла wp-config.php. Чтобы избежать дублирования настроек, создадим функцию wpdevelop_get_db_credentials(), которая вернёт массив с нужными данными.

function wpdevelop_get_db_credentials() {
    require_once ABSPATH . 'wp-config.php';
    return [
        'host' => DB_HOST,
        'user' => DB_USER,
        'password' => DB_PASSWORD,
        'name' => DB_NAME,
        'charset' => DB_CHARSET
    ];
}

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

2. Создание резервной копии базы данных с помощью mysqldump

Самый надёжный способ создать дамп базы – использовать утилиту mysqldump. Проверим, что она доступна на сервере, и вызовем её из PHP.

function wpdevelop_backup_database() {
    $db = wpdevelop_get_db_credentials();
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        mkdir($backup_dir, 0755, true);
    }
    $filename = 'backup-' . date('Y-m-d-H-i-s') . '.sql';
    $filepath = $backup_dir . '/' . $filename;

    $command = sprintf(
        'mysqldump --user=%s --password=%s --host=%s %s > %s',
        escapeshellarg($db['user']),
        escapeshellarg($db['password']),
        escapeshellarg($db['host']),
        escapeshellarg($db['name']),
        escapeshellarg($filepath)
    );

    exec($command, $output, $return_var);
    if ($return_var !== 0) {
        error_log('wpdevelop backup failed: ' . implode("\n", $output));
        return false;
    }
    return $filepath;
}

Обратите внимание на использование escapeshellarg() для безопасности и создание папки wp-content/backups для хранения дампов.

3. Настройка регулярного запуска через WP-Cron

Теперь нужно запускать функцию резервного копирования регулярно. Для этого используем WP-Cron, встроенную систему планировщика WordPress.

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

add_action('wpdevelop_daily_backup', function() {
    wpdevelop_backup_database();
});

Этот код создаст задачу, которая будет запускать резервное копирование раз в сутки. При необходимости можно изменить интервал на 'twicedaily' или 'hourly'.

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

Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:

  • UpdraftPlus – один из самых популярных плагинов для резервного копирования, поддерживает автоматические расписания, хранение копий в облаке и восстановление.
  • BackWPup – бесплатный и функциональный плагин с возможностью создавать резервные копии базы, файлов и загружать их на Dropbox, FTP и другие сервисы.
  • Clearfy Pro – плагин оптимизации и безопасности, который также содержит функции по управлению резервным копированием и очистке базы данных.

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

Как хранить и защищать резервные копии базы данных

Хранение резервных копий – отдельная важная тема. Несколько рекомендаций:

  • Не храните резервные копии в папках, доступных из интернета – лучше использовать wp-content/backups с запретом доступа через .htaccess.
  • Регулярно переносите резервные копии на внешние носители или облачные сервисы, например, Google Drive, Amazon S3 или FTP-сервер.
  • Шифруйте резервные копии, если база содержит чувствительные данные.

Для автоматизации выгрузки в облако можно расширить скрипт или использовать возможности плагинов.

Расширение функционала: уведомления и очистка старых резервных копий

Чтобы не пропустить сбой резервного копирования, полезно настроить уведомления на email или в Telegram. Пример отправки email после успешного создания копии:

function wpdevelop_backup_database_with_notification() {
    $filepath = wpdevelop_backup_database();
    if ($filepath) {
        wp_mail(get_option('admin_email'), 'Резервная копия базы WordPress создана', 'Файл резервной копии: ' . $filepath);
    }
}

Также стоит реализовать удаление резервных копий старше определённого срока, чтобы не заполнять диск:

function wpdevelop_cleanup_old_backups($days = 7) {
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!is_dir($backup_dir)) return;
    $files = glob($backup_dir . '/*.sql');
    $now = time();
    foreach ($files as $file) {
        if ($now - filemtime($file) > $days * 86400) {
            unlink($file);
        }
    }
}

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

Удаление CSS и JS из отдельных страниц WordPress для ускорения загрузки
10.02.2026
Как отключить кеширование в WooCommerce без плагинов: практическое руководство
23.04.2026
Как создать динамический файл robots.txt в WordPress
08.03.2026
Как удалить или изменить slug кастомного типа записи в WordPress без потери данных
03.03.2026
Как создать автоматический импорт постов из RSS в WordPress
18.01.2026