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

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

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

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

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

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

  • Создание дампа базы данных — экспорт в .sql файл
  • Сохранение файла в защищенной папке на сервере
  • Очистка старых резервных копий с целью экономии дискового пространства
  • Настройка автоматического запуска через WP-Cron
  • Отправка уведомления администратору (опционально)

Далее разберем каждый этап на примере кода.

Экспорт базы данных в файл .sql с помощью PHP и mysqldump

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

Создадим функцию wpbook_backup_create_db_dump(), которая сформирует дамп и сохранит его в папку wp-content/backups с именем, включающим дату.

function wpbook_backup_create_db_dump() {
    global $wpdb;

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

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

    $date = date('Y-m-d_H-i-s');
    $filename = "backup_{$date}.sql";
    $filepath = $backup_dir . '/' . $filename;

    // Формируем команду mysqldump
    $command = "mysqldump --user={$db_user} --password={$db_password} --host={$db_host} {$db_name} > {$filepath}";

    // Выполняем команду
    system($command, $output);

    // Проверяем, что файл создан
    if (file_exists($filepath)) {
        return $filepath;
    } else {
        return false;
    }
}

Обратите внимание:

  • Пароль передается в команде — убедитесь, что права доступа к файлам и к серверу настроены корректно.
  • Если на вашем хостинге нет доступа к shell-командам, придется использовать альтернативные методы, например, экспорт через PHP (см. ниже).

Альтернативный метод: экспорт базы данных через PHP и WPDB

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

function wpbook_backup_create_db_dump_php() {
    global $wpdb;

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

    $date = date('Y-m-d_H-i-s');
    $filename = "backup_{$date}.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 .= "\n\n" . $create_table[1] . ";\n\n";

        $rows = $wpdb->get_results("SELECT * FROM {$table_name}", ARRAY_A);

        foreach ($rows as $row) {
            $values = array_map(function($value) use ($wpdb) {
                if (is_null($value)) {
                    return 'NULL';
                }
                return "'" . esc_sql($value) . "'";
            }, array_values($row));

            $sql_dump .= "INSERT INTO {$table_name} VALUES (" . implode(', ', $values) . ");\n";
        }
    }

    file_put_contents($filepath, $sql_dump);

    if (file_exists($filepath)) {
        return $filepath;
    } else {
        return false;
    }
}

Этот метод создаст файл с полным дампом базы, но при больших базах может работать медленно.

Автоматизация запуска резервного копирования через WP-Cron

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

function wpbook_backup_schedule_cron() {
    if (!wp_next_scheduled('wpbook_backup_event')) {
        wp_schedule_event(time(), 'daily', 'wpbook_backup_event'); // запуск каждый день
    }
}
add_action('wp', 'wpbook_backup_schedule_cron');

function wpbook_backup_cron_function() {
    $file = wpbook_backup_create_db_dump();
    if ($file) {
        // Можно отправить уведомление администратору
        wp_mail(get_option('admin_email'), 'Резервная копия базы данных создана', "Файл резервной копии создан: {$file}");
    }
}
add_action('wpbook_backup_event', 'wpbook_backup_cron_function');

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

Удаление старых резервных копий для экономии места

Чтобы не захламлять сервер постоянным накоплением файлов, реализуем автоматическую очистку резервных копий старше 7 дней.

function wpbook_backup_cleanup_old_files() {
    $backup_dir = WP_CONTENT_DIR . '/backups';
    $files = glob($backup_dir . '/backup_*.sql');
    $now = time();

    foreach ($files as $file) {
        if (is_file($file)) {
            $filetime = filemtime($file);
            if (($now - $filetime) > 7 * DAY_IN_SECONDS) {
                unlink($file);
            }
        }
    }
}
add_action('wpbook_backup_event', 'wpbook_backup_cleanup_old_files');

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

Безопасность и рекомендации

При создании бэкапов вручную важно учитывать защиту данных:

  • Папка с бэкапами должна быть недоступна напрямую из браузера (закрыть через .htaccess или разместить за пределами корня сайта)
  • Ограничьте права доступа к файлам и папкам резервных копий
  • Регулярно проверяйте работоспособность бэкапов, восстанавливая тестовую копию
  • Если используете команду mysqldump, убедитесь в безопасности передачи пароля

Дополнительные инструменты для резервного копирования на WPBook.ru

Если вы хотите использовать готовые решения с расширенными возможностями, обратите внимание на плагин Clearfy Pro. Он поможет не только с резервным копированием, но и оптимизацией сайта в целом.

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматический импорт данных из Google Analytics в WordPress
07.04.2026
Как создать динамические шаблоны в WordPress с помощью WPBook
12.01.2026
Как использовать pre_get_posts для исключения категории из главной ленты WordPress
22.04.2026
Как использовать хуки для автоматического изменения стоимости товара в WooCommerce
09.05.2026
Автоматическое отключение неиспользуемых плагинов в WordPress: практическое решение
02.03.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее