Резервное копирование — одна из ключевых задач для любого сайта на WordPress. Регулярные копии позволяют быстро восстановить работоспособность сайта после ошибок, взломов или сбоев хостинга. В этой статье мы подробно разберём, как автоматизировать создание резервных копий WordPress, используя готовые плагины и собственные решения с помощью кода.
Зачем нужна автоматизация резервного копирования WordPress
Резервное копирование вручную — процесс трудоёмкий и часто забываемый. Автоматизация позволяет:
- Регулярно создавать копии без участия администратора;
- Минимизировать риск потери данных;
- Обеспечить быстрое восстановление сайта;
- Управлять расписанием и местом хранения копий.
Для сайтов с частыми обновлениями контента регулярность особенно важна — потеря даже одного дня данных может привести к убыткам.
Популярные плагины для автоматического резервного копирования WordPress
Существует множество плагинов, которые позволяют настроить автоматическое резервное копирование. Рассмотрим самые надёжные и удобные.
UpdraftPlus — полный набор функций
UpdraftPlus — самый популярный плагин с миллионами активных установок. Позволяет создавать бэкапы базы данных, файлов и даже отправлять копии на облачные хранилища (Google Drive, Dropbox, Amazon S3 и др.).
Особенности:
- Автоматическое расписание (ежечасно, ежедневно, еженедельно);
- Восстановление из панели WordPress;
- Выборочно копирует файлы и таблицы базы;
- Поддержка мультисайтов.
Настройка расписания происходит в разделе «Настройки» плагина, где можно выбрать удобное время и частоту.
BackWPup — удобный бесплатный вариант
BackWPup позволяет создавать полные копии сайта и отправлять их на FTP, Dropbox, S3 и другие сервисы. Имеет понятный интерфейс и гибкие настройки.
Особенности:
- Поддержка нескольких заданий бэкапа с разным расписанием;
- Оптимизация базы данных при создании копии;
- Отправка отчётов по email;
- Возможность шифрования резервных копий.
Подходит для сайтов с ограниченным бюджетом, так как бесплатная версия достаточно функциональна.
Создание собственного решения для автоматического бэкапа WordPress с помощью кода
Иногда готовые плагины не подходят, например, по требованиям безопасности или специфике хостинга. В таких случаях можно написать собственный код, который будет создавать резервные копии и запускаться по расписанию.
Использование WP-Cron для автоматизации задач
WordPress имеет встроенную систему планировщика задач — WP-Cron. С её помощью можно запускать пользовательские функции автоматически.
Пример регистрации крон-задачи:
function wporg_register_backup_cron() {
if ( ! wp_next_scheduled( 'wporg_backup_event' ) ) {
wp_schedule_event( time(), 'daily', 'wporg_backup_event' );
}
}
add_action( 'wp', 'wporg_register_backup_cron' );Данный код ставит задачу на ежедневный запуск хука wporg_backup_event.
Функция создания резервной копии базы и файлов
Для создания резервной копии базы данных можно использовать стандартные функции WordPress или напрямую работать с MySQL. Для копирования файлов — использовать PHP-функции архивирования.
Пример простой функции для создания архива базы данных и wp-content:
function wporg_create_backup() {
global $wpdb;
$backup_dir = WP_CONTENT_DIR . '/backups';
if ( ! file_exists( $backup_dir ) ) {
mkdir( $backup_dir, 0755, true );
}
$date = date( 'Y-m-d-H-i-s' );
$backup_file = $backup_dir . '/backup-' . $date . '.zip';
// Экспорт базы данных
$db_file = $backup_dir . '/db-' . $date . '.sql';
$command = 'mysqldump --user=' . DB_USER . ' --password=' . DB_PASSWORD . ' --host=' . DB_HOST . ' ' . DB_NAME . ' > ' . $db_file;
exec( $command );
// Создаем zip архив
$zip = new ZipArchive();
if ( $zip->open( $backup_file, ZipArchive::CREATE ) === true ) {
// Добавляем базу
$zip->addFile( $db_file, basename( $db_file ) );
// Добавляем папку wp-content
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator( WP_CONTENT_DIR ),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ( $files as $name => $file ) {
if ( ! $file->isDir() ) {
$filePath = $file->getRealPath();
$relativePath = substr( $filePath, strlen( WP_CONTENT_DIR ) + 1 );
$zip->addFile( $filePath, 'wp-content/' . $relativePath );
}
}
$zip->close();
}
// Удаляем временный файл базы
unlink( $db_file );
}
add_action( 'wporg_backup_event', 'wporg_create_backup' );Важно: команда mysqldump должна быть доступна на сервере, а PHP-скрипту разрешено выполнять exec.
Отправка резервных копий на удалённый сервер или облако
Для безопасности стоит не только создавать копии локально, но и отправлять их на удалённые хранилища. Например, на FTP-сервер, Amazon S3 или Google Drive.
Пример отправки файла на FTP с помощью PHP:
function wporg_send_to_ftp( $file_path ) {
$ftp_server = 'ftp.example.com';
$ftp_user = 'username';
$ftp_pass = 'password';
$conn_id = ftp_connect( $ftp_server );
$login_result = ftp_login( $conn_id, $ftp_user, $ftp_pass );
if ( !$conn_id || !$login_result ) {
error_log('FTP connection failed');
return false;
}
ftp_pasv( $conn_id, true );
$remote_file = basename( $file_path );
if ( ftp_put( $conn_id, $remote_file, $file_path, FTP_BINARY ) ) {
ftp_close( $conn_id );
return true;
} else {
ftp_close( $conn_id );
error_log('FTP upload failed');
return false;
}
}Данный код можно вызвать в конце функции создания резервной копии.
Рекомендации по безопасности и хранению резервных копий
Храните бэкапы в безопасных местах, не на том же сервере, где размещён сайт. Желательно использовать зашифрованные архивы и защищённые паролями хранилища.
Регулярно проверяйте работоспособность резервных копий, восстанавливая их на тестовом сервере.
Используйте мониторинг и уведомления о статусе бэкапов — это поможет быстро реагировать на сбои.
Итоги
Автоматизация резервного копирования — обязательный элемент поддержки любого WordPress-сайта. Готовые плагины упрощают настройку, но при необходимости можно создать кастомное решение с помощью WP-Cron и PHP. Главное — регулярно создавать копии и хранить их в надёжном месте.