Зачем нужна автоматическая резервная копия WordPress
Резервное копирование сайта — это одна из важнейших процедур для любого владельца WordPress-сайта. В случае взлома, ошибки при обновлении или сбоя на сервере, резервная копия позволит быстро восстановить работоспособность ресурса без потери данных и настроек. Автоматизация процесса резервного копирования экономит ваше время и исключает человеческий фактор — забыть сделать копию просто невозможно.
В этой статье разберем, как настроить автоматическое резервное копирование сайта на WordPress, рассмотрим популярные плагины и покажем пример собственного решения с использованием PHP и WP-Cron.
Популярные плагины для автоматического бэкапа WordPress
На рынке существует множество плагинов, которые позволяют создавать резервные копии автоматически. Рассмотрим самые востребованные и проверенные решения.
UpdraftPlus — простой и мощный бэкап
UpdraftPlus — один из самых популярных плагинов для резервного копирования с возможностью автоматизации. Он умеет сохранять копии на облачные хранилища: Google Drive, Dropbox, Amazon S3 и другие.
- Настройка расписания бэкапов для файлов и базы данных отдельно.
- Простой интерфейс для восстановления сайта в один клик.
- Поддержка инкрементальных копий (в платной версии).
Чтобы настроить автоматический бэкап, достаточно установить плагин, перейти в настройки UpdraftPlus и в разделе "Настройки" включить расписание для файлов и базы данных, выбрав удобный интервал (например, ежедневно или еженедельно).
BackWPup — расширенные возможности и гибкость
BackWPup позволяет создавать резервные копии и отправлять их не только на облачные сервисы, но и на FTP, по электронной почте или сохранять на сервере.
- Планировщик заданий с гибкими настройками.
- Возможность создавать полный бэкап сайта или только базы данных.
- Поддержка мультисайтов WordPress.
Для автоматизации достаточно настроить задачу с нужным расписанием в разделе "BackWPup > Добавить задание", указать тип резервной копии, места хранения и расписание.
Как сделать собственное автоматическое резервное копирование с помощью WP-Cron
Если вы хотите более тонко контролировать процесс или не хотите использовать плагины, можно создать собственное решение с использованием встроенного планировщика WP-Cron.
Основная идея — добавить в функции темы или плагина задачу, которая будет регулярно запускаться и создавать резервную копию базы данных и файлов сайта.
Создание задачи планировщика для резервного копирования
Сначала регистрируем событие:
function wppuzzle_schedule_backup() {
if ( ! wp_next_scheduled( 'wppuzzle_do_backup' ) ) {
wp_schedule_event( time(), 'daily', 'wppuzzle_do_backup' );
}
}
add_action( 'wp', 'wppuzzle_schedule_backup' );Здесь мы проверяем, не запланировано ли уже событие wppuzzle_do_backup, и если нет — планируем его на ежедневное выполнение.
Функция создания резервной копии базы данных
Для базы данных можно использовать встроенный класс wpdb и экспортировать таблицы в файл SQL:
function wppuzzle_create_db_backup() {
global $wpdb;
$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 .= $create_table[1] . ";\n\n";
$rows = $wpdb->get_results( "SELECT * FROM $table_name", ARRAY_A );
foreach ( $rows as $row ) {
$vals = array_map( array( $wpdb, 'escape' ), array_values( $row ) );
$vals = array_map( function($val) { return "'" . str_replace("'", "\\'", $val) . "'"; }, $vals );
$sql_dump .= "INSERT INTO $table_name VALUES(" . implode( ', ', $vals ) . ");\n";
}
$sql_dump .= "\n";
}
$upload_dir = wp_upload_dir();
$file = $upload_dir['basedir'] . '/wppuzzle_db_backup_' . date('Y-m-d_H-i-s') . '.sql';
file_put_contents( $file, $sql_dump );
}Данная функция создаст SQL-дамп всех таблиц и сохранит его в папку загрузок WordPress.
Создание резервной копии файлов сайта
Для копирования файлов можно архивировать директорию wp-content — именно там хранятся темы, плагины и загрузки.
function wppuzzle_create_files_backup() {
$upload_dir = wp_upload_dir();
$backup_path = $upload_dir['basedir'] . '/wppuzzle_files_backup_' . date('Y-m-d_H-i-s') . '.zip';
$zip = new ZipArchive();
if ( $zip->open( $backup_path, ZipArchive::CREATE ) !== TRUE ) {
return;
}
$rootPath = realpath( ABSPATH . 'wp-content' );
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $name => $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
}Эта функция создаст ZIP-архив с содержимым папки wp-content и сохранит его в директорию загрузок.
Запуск функций при срабатывании задачи
Теперь нужно связать нашу задачу с выполнением функций:
add_action( 'wppuzzle_do_backup', 'wppuzzle_create_db_backup' );
add_action( 'wppuzzle_do_backup', 'wppuzzle_create_files_backup' );Таким образом, при срабатывании задачи wppuzzle_do_backup будут запускаться обе функции создания резервных копий.
Как проверить, что автоматическое резервное копирование работает
Чтобы убедиться, что резервное копирование происходит, можно:
- Проверить папку загрузок WordPress — там должны появляться файлы с именами
wppuzzle_db_backup_иwppuzzle_files_backup_. - Использовать плагин WP Crontrol для просмотра и запуска запланированных событий вручную.
- Добавить логирование в функции бэкапа, чтобы фиксировать успешные запуски с датой и временем.
Дополнительные советы по резервному копированию WordPress
Помимо создания резервных копий, важно продумать следующие моменты:
- Хранение копий в надежном месте. Не оставляйте бэкапы только на сервере сайта — лучше выгружать их на удаленный сервер или облако.
- Периодичность создания копий. Чем чаще обновляется сайт, тем чаще нужно делать бэкапы.
- Тестирование восстановления. Регулярно проверяйте, можно ли восстановить сайт из резервной копии, чтобы избежать неприятных сюрпризов.
Если вы используете собственное решение, подумайте о расширении функционала: отправка копий на email, интеграция с облачными хранилищами, очистка старых бэкапов.
Заключение
Автоматическое резервное копирование — обязательный элемент надежного управления сайтом на WordPress. Вы можете выбрать готовый плагин или создать собственное решение, которое будет работать именно так, как вам нужно. Главное — не забывать про регулярные бэкапы и хранить их в безопасном месте.