wp-code.ru wordpress WP-Codе

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

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

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

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

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

Настройка автоматического бэкапа через WP-Cron

WordPress имеет встроенную систему планировщика задач — WP-Cron, с помощью которой можно запускать наши функции по расписанию. Создадим кастомное событие, которое раз в сутки будет создавать SQL-дамп базы данных и сохранять его в папку wp-content/backups.

Шаг 1. Регистрируем крон-событие

Добавьте в файл functions.php вашей темы или в кастомный плагин следующий код:

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

Этот код регистрирует ежедневное событие wpcode_daily_backup_event, если оно еще не запланировано.

Шаг 2. Создаем функцию для бэкапа

Теперь необходимо написать функцию, которая создаст дамп базы в формате SQL и сохранит его на сервере.

function wpcode_create_database_backup() {
    global $wpdb;
    $backup_dir = WP_CONTENT_DIR . '/backups';

    if ( ! file_exists( $backup_dir ) ) {
        wp_mkdir_p( $backup_dir );
    }

    $filename = 'db-backup-' . date( 'Y-m-d-H-i-s' ) . '.sql';
    $filepath = $backup_dir . '/' . $filename;

    $db_host = DB_HOST;
    $db_name = DB_NAME;
    $db_user = DB_USER;
    $db_password = DB_PASSWORD;

    // Формируем команду mysqldump
    $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('[' . date('Y-m-d H:i:s') . '] WPCode: Бэкап базы данных успешно создан: ' . $filepath);
    } else {
        error_log('[' . date('Y-m-d H:i:s') . '] WPCode: Ошибка при создании бэкапа базы данных.');
    }
}
add_action( 'wpcode_daily_backup_event', 'wpcode_create_database_backup' );

Обратите внимание, что для выполнения mysqldump на сервере должна быть доступна эта команда, а PHP должен иметь права на создание файлов в папке wp-content/backups.

Альтернативный вариант без mysqldump — экспорт через PHP

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

Пример базового варианта такой функции:

function wpcode_export_db_to_sql() {
    global $wpdb;
    $tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
    $sql = '';

    foreach ($tables as $table) {
        $table_name = $table[0];

        // Получаем структуру таблицы
        $create_table = $wpdb->get_row('SHOW CREATE TABLE ' . $table_name, ARRAY_N);
        $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);
            $sql .= 'INSERT INTO ' . $table_name . ' VALUES(' . implode(',', $vals) . ");\n";
        }
        $sql .= "\n\n";
    }

    $backup_dir = WP_CONTENT_DIR . '/backups';
    if (!file_exists($backup_dir)) {
        wp_mkdir_p($backup_dir);
    }

    $filename = 'db-backup-' . date('Y-m-d-H-i-s') . '.sql';
    $filepath = $backup_dir . '/' . $filename;

    file_put_contents($filepath, $sql);
    error_log('[' . date('Y-m-d H:i:s') . '] WPCode: Бэкап базы данных (через PHP) сохранен: ' . $filepath);
}
add_action('wpcode_daily_backup_event', 'wpcode_export_db_to_sql');

Данный способ создает SQL-файл с полным дампом таблиц и данных, но может быть проблемным при очень больших базах.

Безопасность и хранение резервных копий

Очень важно хранить бэкапы в безопасном месте. Папка wp-content/backups по умолчанию доступна из браузера, и это риск. Чтобы защитить бэкапы:

  • Добавьте в папку файл .htaccess с содержимым deny from all (для Apache).
  • Или настройте правила доступа на уровне сервера (Nginx).
  • Регулярно переносите копии на удаленные хранилища — FTP, облако, или скачивайте локально.

Пример использования плагина для расширенных возможностей

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

Как вручную запускать бэкап и проверять логи

Для тестирования функции можно вызвать её вручную, например, добавив временно в functions.php:

add_action('init', 'wpcode_create_database_backup');

После первого срабатывания не забудьте убрать этот код, чтобы не создавать избыточные копии.

Ошибки и успешные операции сохраняются в системный лог PHP (error_log), где их можно проверить через хостинг или панели управления.

Итоги

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

Экспериментируйте с примерами, адаптируйте под свои нужды и не забывайте о безопасности!

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше