Резервное копирование — одна из важнейших процедур для любого сайта на WordPress. Регулярные бэкапы позволяют быстро восстановить сайт после взлома, ошибки обновления или других непредвиденных ситуаций. В этой статье подробно разберём, как настроить автоматическое резервное копирование в WordPress с помощью кода и популярных плагинов. Также рассмотрим примеры самостоятельных решений для гибкой кастомизации процесса.
Почему важно автоматизировать резервное копирование WordPress
Ручное создание резервных копий часто забывается или откладывается, что увеличивает риск потери данных. Автоматизация решает эту проблему, гарантируя, что копии создаются регулярно без участия администратора. Это особенно важно для сайтов с частыми обновлениями контента или баз данных.
Кроме того, автоматические бэкапы можно настроить с отправкой копий на удалённые сервисы (Google Drive, Dropbox, FTP), чтобы обезопасить данные даже при проблемах с хостингом.
Использование плагинов для автоматического резервного копирования в WordPress
Существуют десятки плагинов для резервного копирования, но мы рассмотрим самые популярные и надёжные.
UpdraftPlus
Один из самых популярных бесплатных плагинов. Позволяет создавать автоматические бэкапы базы данных, файлов и плагинов, а также отправлять копии на облачные хранилища.
- Установка и настройка просты и интуитивны.
- Поддержка расписаний: ежедневное, еженедельное, ежемесячное создание копий.
- Возможность восстановления сайта прямо из админки.
Чтобы настроить автоматизацию, достаточно после установки перейти в настройки UpdraftPlus, выбрать расписание и подключить облачное хранилище:
1. В админке WordPress зайдите в Настройки → UpdraftPlus Backup.
2. Выберите расписание резервного копирования: например, ежедневно в 2 часа ночи.
3. Подключите Google Drive или другое хранилище для хранения копий.
4. Сохраните настройки.
WPvivid Backup Plugin
Другой мощный плагин с возможностями автоматизации, миграции и клонирования. WPvivid позволяет легко настроить расписание бэкапов и отправку на внешний сервер.
Преимущества:
- Интуитивный интерфейс.
- Поддержка отложенных задач для минимизации нагрузки.
- Встроенный инструмент восстановления.
Как реализовать автоматическое резервное копирование WordPress с помощью PHP-кода и WP Cron
Если вы хотите реализовать резервное копирование без плагинов, можно написать собственный скрипт с использованием wp_schedule_event и встроенных функций WordPress для экспорта базы данных и копирования файлов.
Шаг 1: Создаём функцию резервного копирования базы данных
В этом примере мы экспортируем базу данных в файл SQL и сохраняем его в папке wp-content/backups:
function wplesson_backup_database() {
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 .= $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 .= "INSERT INTO $table_name VALUES(" . implode(',', $values) . ");\n";
}
$sql .= "\n\n";
}
file_put_contents( $filepath, $sql );
}
Шаг 2: Создаём событие для автоматического запуска
Добавим в файл functions.php или в свой плагин следующий код, чтобы запускать резервное копирование ежедневно:
function wplesson_schedule_backup() {
if ( ! wp_next_scheduled( 'wplesson_daily_backup_event' ) ) {
wp_schedule_event( time(), 'daily', 'wplesson_daily_backup_event' );
}
}
add_action( 'wp', 'wplesson_schedule_backup' );
add_action( 'wplesson_daily_backup_event', 'wplesson_backup_database' );
Шаг 3: Копирование файлов сайта
Для резервного копирования файлов можно использовать PHP-функции архивации. Пример архивации директории wp-content/uploads в zip-архив:
function wplesson_backup_uploads() {
$upload_dir = wp_upload_dir()['basedir'];
$backup_dir = WP_CONTENT_DIR . '/backups';
if ( ! file_exists( $backup_dir ) ) {
wp_mkdir_p( $backup_dir );
}
$zipname = $backup_dir . '/uploads-backup-' . date('Y-m-d-H-i-s') . '.zip';
$zip = new ZipArchive();
if ( $zip->open( $zipname, ZipArchive::CREATE ) === TRUE ) {
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($upload_dir),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $name => $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($upload_dir) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
}
}
Вы можете добавить вызов wplesson_backup_uploads в функцию wplesson_backup_database или в отдельное событие.
Отправка резервных копий на удалённые сервера
Хранение копий только на сервере опасно. Лучше отправлять бэкапы на облачные хранилища или FTP. Для этого можно использовать плагины, например, UpdraftPlus, или написать свой код.
Пример отправки бэкапа на FTP с помощью PHP
function wplesson_send_backup_ftp( $file_path ) {
$ftp_server = 'ftp.example.com';
$ftp_user = 'username';
$ftp_pass = 'password';
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
if (@ftp_login($ftp_conn, $ftp_user, $ftp_pass)) {
ftp_pasv($ftp_conn, true);
$remote_file = basename($file_path);
if ( ftp_put($ftp_conn, $remote_file, $file_path, FTP_BINARY) ) {
error_log("Backup file uploaded successfully: $remote_file");
} else {
error_log("Failed to upload backup file: $remote_file");
}
} else {
error_log("FTP login failed");
}
ftp_close($ftp_conn);
}
После создания архивов можно вызвать эту функцию для отправки на FTP.
Резюме и рекомендации по выбору метода резервного копирования
Если вы хотите минимизировать участие и получить надёжное решение, рекомендуем пользоваться плагинами, например, UpdraftPlus или WPvivid Backup Plugin. Они имеют множество настроек, включая автоматическую загрузку на облачные сервисы и простой интерфейс восстановления.
Если же вы хотите контролировать процесс и интегрировать резервное копирование в собственные бизнес-процессы, можно использовать кодовые решения на базе WP Cron и PHP-функций. В этом случае важно грамотно настроить права доступа, проверять логи и регулярно тестировать восстановление.
В любом случае, автоматическое резервное копирование — обязательный элемент надежной защиты сайта на WordPress.