wpcompany.ru wordpress WPCompany

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

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

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

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

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

Основные варианты создания резервных копий в WordPress

Плагины для бэкапа

Самый популярный способ — использовать плагины, например UpdraftPlus, BackWPup, WPBackItUp. Они обеспечивают удобный интерфейс и множество функций, но иногда слишком тяжеловесны или имеют ограничения в бесплатных версиях.

Скрипты и кастомные решения

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

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

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

Шаг 1. Создаем функцию для экспорта базы данных

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

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

    $tables = $wpdb->get_col('SHOW TABLES');

    $sql_dump = '';

    foreach ( $tables as $table ) {
        $create_table = $wpdb->get_row("SHOW CREATE TABLE $table", ARRAY_N);
        $sql_dump .= "DROP TABLE IF EXISTS `$table`;\n";
        $sql_dump .= $create_table[1] . ";\n\n";

        $rows = $wpdb->get_results("SELECT * FROM $table", ARRAY_A);
        foreach ( $rows as $row ) {
            $values = array_map( function($value) use ($wpdb) {
                if ( is_null($value) ) return 'NULL';
                return "'" . esc_sql($value) . "'";
            }, $row );
            $sql_dump .= "INSERT INTO `$table` VALUES (" . implode(',', $values) . ");\n";
        }
        $sql_dump .= "\n";
    }

    file_put_contents( $filepath, $sql_dump );
}

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

Шаг 2. Запускаем функцию по расписанию с помощью wp-cron

Для автоматизации добавим хук и зададим интервал:

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

add_action( 'wpcompany_db_backup_event', 'wpcompany_create_db_backup' );

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

Шаг 3. Настройка нестандартного интервала (при необходимости)

Если нужно, например, раз в 12 часов, добавим собственный интервал:

function wpcompany_custom_cron_intervals( $schedules ) {
    if ( ! isset( $schedules['twicedaily'] ) ) {
        $schedules['twicedaily'] = array(
            'interval' => 12 * 60 * 60,
            'display' => __( 'Раз в 12 часов' )
        );
    }
    return $schedules;
}
add_filter( 'cron_schedules', 'wpcompany_custom_cron_intervals' );

// И изменить wp_schedule_event на 'twicedaily'

Дополнительные советы по безопасности и организации бэкапов

Выбор места хранения бэкапов

Хранить резервные копии лучше вне корня сайта, чтобы при взломе они не были легко доступны. В нашем примере мы сохраняем в wp-content/backups, но можно настроить и удаленную папку, FTP или облачное хранилище (Amazon S3, Google Drive) через соответствующие API.

Удаление старых копий

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

function wpcompany_cleanup_old_backups( $days = 7 ) {
    $backup_dir = WP_CONTENT_DIR . '/backups';
    if ( ! is_dir( $backup_dir ) ) return;

    $files = glob( $backup_dir . '/wp-db-backup-*.sql' );
    $now = time();
    foreach ( $files as $file ) {
        if ( $now - filemtime( $file ) > 60 * 60 * 24 * $days ) {
            unlink( $file );
        }
    }
}
// Можно вызвать в конце функции wpcompany_create_db_backup
<

Отправка бэкапа на email или в облако

Для большей надежности можно автоматически отправлять копию на почту или загружать в облако. Для почтовой отправки используйте wp_mail, а для облака — соответствующие SDK.

Заключение

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

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

×

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

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

пишет статьи

готовит SEO

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

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