Резервное копирование — одна из важнейших задач при управлении сайтом на WordPress. Наличие регулярных резервных копий позволяет быстро восстановить сайт после сбоев, хакерских атак или ошибок при обновлениях. В этой статье мы подробно разберём, как добавить автоматическое создание резервных копий WordPress с использованием плагинов и кастомных решений на PHP, которые можно интегрировать в тему или плагин.
Почему важно автоматизировать создание резервных копий WordPress
Многие администраторы сайтов делают резервные копии вручную или полагаются на хостинг, но это не всегда надёжно. Ручные копии часто забываются, а хостинг может не хранить файлы достаточно долго или не создавать бэкапы перед обновлениями. Автоматизация процесса решает эти проблемы, обеспечивая регулярное сохранение данных без вашего участия.
Автоматические резервные копии позволяют:
- Сохранять базу данных и файлы сайта по расписанию
- Минимизировать риски потери данных
- Обеспечить быстрое восстановление сайта
- Интегрировать копии с облачными хранилищами
Далее рассмотрим готовые решения на базе плагинов и пример кастомной функции для разработчиков.
Лучшие плагины для автоматического создания резервных копий WordPress
UpdraftPlus — простой и функциональный
UpdraftPlus — один из самых популярных и надёжных плагинов для резервного копирования. Позволяет создавать бэкапы базы данных, файлов и тем, а также загружать копии на облачные хранилища: Google Drive, Dropbox, Яндекс.Диск и др.
Основные преимущества:
- Планировщик резервных копий с гибкой настройкой
- Восстановление сайта прямо из админки
- Поддержка мультисайтов
- Легко интегрируется с популярными облачными сервисами
Для установки:
- Перейдите в раздел «Плагины» — «Добавить новый»
- В поиске введите «UpdraftPlus»
- Установите и активируйте плагин
- Настройте расписание и место хранения копий
Подробное руководство по UpdraftPlus с UTM-метками доступно на wpshop.ru.
BackWPup — расширенный функционал для опытных
BackWPup позволяет создавать полные резервные копии, экспортировать базу данных, загружать копии на Dropbox, S3, FTP и другие сервисы. Отличается удобным интерфейсом и большим числом настроек, позволяющих тонко управлять процессом.
Для автоматизации необходимо:
- Создать задание резервного копирования
- Выбрать компоненты: база, файлы, темы
- Настроить расписание и место сохранения
Этот плагин отлично подходит для тех, кто хочет максимальный контроль над процессом.
Пример кастомного решения для автоматического создания резервных копий WordPress
Если вы хотите встроить создание резервных копий в собственный плагин или тему, можно написать функцию, которая будет запускать процесс по расписанию с помощью WP-Cron.
Ниже приведён пример кода, который создаёт резервную копию базы данных и сохраняет её в папку wp-content/backups. Для удобства функция добавлена с префиксом wpdeveloper_.
function wpdeveloper_create_db_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;
$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 .= "\nDROP TABLE IF EXISTS `{$table_name}`;\n";
$sql .= $create_table[1] . ";\n\n";
$rows = $wpdb->get_results("SELECT * FROM {$table_name}", ARRAY_A);
foreach ( $rows as $row ) {
$columns = array_map( function($val) use ($wpdb) { return $wpdb->_escape($val); }, array_keys($row));
$values = array_map( function($val) use ($wpdb) { return is_null($val) ? 'NULL' : "'" . esc_sql($val) . "'"; }, array_values($row));
$sql .= "INSERT INTO `{$table_name}` (`" . implode('`,`', $columns) . "`) VALUES (" . implode(',', $values) . ");\n";
}
$sql .= "\n";
}
file_put_contents( $filepath, $sql );
}
// Регистрируем событие по расписанию
if ( ! wp_next_scheduled( 'wpdeveloper_daily_db_backup' ) ) {
wp_schedule_event( time(), 'daily', 'wpdeveloper_daily_db_backup' );
}
// Хук запуска резервного копирования
add_action( 'wpdeveloper_daily_db_backup', 'wpdeveloper_create_db_backup' );Этот код:
- Создаёт папку
wp-content/backups, если её нет - Экспортирует всю структуру и данные базы в SQL-файл с меткой времени
- Запускает функцию автоматически раз в сутки через WP-Cron
Такое решение можно расширить, добавив отправку архива на почту, загрузку на удалённый сервер по FTP или интеграцию с облачным хранилищем.
Обзор дополнительных опций и советы по резервному копированию
Резервное копирование файлов темы и плагинов
Для полного восстановления сайта важна не только база данных, но и файлы: темы, плагины, медиа. Вручную можно использовать FTP или SSH для копирования, но для автоматизации лучше использовать плагин с поддержкой полной резервной копии. Например, UpdraftPlus умеет сохранять все необходимые файлы и папки.
Если пишете собственное решение, обратите внимание на функцию wpdeveloper_backup_files(), которая может рекурсивно копировать нужные каталоги:
function wpdeveloper_backup_files($source, $destination) {
if (is_dir($source)) {
@mkdir($destination, 0755, true);
$files = scandir($source);
foreach ($files as $file) {
if ($file === '.' || $file === '..') continue;
wpdeveloper_backup_files($source . '/' . $file, $destination . '/' . $file);
}
} elseif (is_file($source)) {
copy($source, $destination);
}
}Выбор места хранения резервных копий
Резервные копии нужно хранить вне основного сервера сайта, чтобы избежать потери при сбоях хостинга. Рассмотрите варианты:
- Облачные сервисы (Google Drive, Dropbox, Яндекс.Диск)
- Отдельный FTP-сервер
- Отправка на email
Плагины, такие как UpdraftPlus и BackWPup, поддерживают интеграцию с большинством популярных сервисов и позволяют настроить автоматическую загрузку резервных копий.
Рекомендации по частоте и количеству копий
Частота создания резервных копий зависит от активности сайта. Для небольших блогов достаточно делать копии раз в неделю, для интернет-магазинов и больших проектов — ежедневно или даже несколько раз в день.
Храните минимум 3-5 последних копий для возможности отката на нужную дату. Следите за размером бэкапов, чтобы не переполнить дисковое пространство.