Резервное копирование сайта — одна из важнейших задач для каждого администратора WordPress. Автоматический бэкап позволит избежать потери данных при сбоях, обновлениях или взломах. В этой статье мы подробно разберём, как настроить автоматический бэкап WordPress, используя плагины и собственные решения с кодом.
Почему важен автоматический бэкап WordPress
Резервное копирование — это страховка вашего сайта. Если что-то пойдёт не так — например, обновление плагина сломает функционал, или произойдёт сбой на сервере — вы сможете быстро восстановить работоспособность.
Ручное копирование файлов и базы данных требует времени и внимания, и часто забывается. Автоматизация этого процесса снижает риски и экономит время.
Кроме того, автоматический бэкап полезен для тестирования обновлений и миграции сайта на другой сервер.
Популярные плагины для автоматического бэкапа WordPress
Для автоматизации резервного копирования существуют проверенные плагины. Вот несколько из них:
- UpdraftPlus — один из самых популярных и функциональных плагинов. Позволяет делать бэкапы в облако (Google Drive, Dropbox, Amazon S3 и др.), настраивать расписание, восстанавливать сайт в пару кликов.
- BackWPup — бесплатный плагин с возможностью создавать бэкапы файлов и базы данных, отправлять их на FTP или облачные сервисы.
- WPvivid Backup Plugin — удобный инструмент с функцией миграции сайта и планировщиком заданий.
Для настройки автоматического бэкапа через плагин обычно достаточно установить его, подключить облачное хранилище и задать расписание. Рассмотрим пример на UpdraftPlus.
Пример настройки UpdraftPlus для автоматического бэкапа
1. Установите и активируйте плагин через админку WordPress.
2. Перейдите в Настройки → UpdraftPlus Backups.
3. Вкладка Настройки: выберите периодичность бэкапа файлов и базы данных (например, ежедневно или еженедельно).
4. В разделе Выбор удалённого хранилища подключите Google Drive или другой сервис.
5. Сохраните настройки и запустите первый бэкап вручную, чтобы проверить работу.
Так вы получите автоматическую систему резервного копирования с уведомлениями и возможностью восстановления в несколько кликов.
Как создать собственный автоматический бэкап WordPress на PHP и WP Cron
Если вы хотите создать кастомное решение без плагинов, можно написать свой код для автоматического бэкапа с помощью WP Cron. Это позволит гибко настраивать задачи под свои нужды, например, сохранять бэкапы на сервере или отправлять по email.
Основные этапы:
- Создать функцию, которая сделает дамп базы данных и скопирует нужные файлы.
- Запланировать запуск этой функции с помощью WP Cron.
- Обеспечить хранение бэкапов и очистку старых копий.
Пример функции для резервного копирования базы данных
function wpwebsite_backup_database() {
global $wpdb;
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
$backup_sql = '';
foreach ($tables as $table) {
$table_name = $table[0];
$create_table = $wpdb->get_row("SHOW CREATE TABLE $table_name", ARRAY_N);
$backup_sql .= "\n\n-- Table structure for $table_name\n\n";
$backup_sql .= $create_table[1] . ";\n\n";
$rows = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);
foreach ($rows as $row) {
$vals = array_map(function($val) use ($wpdb) {
return isset($val) ? "'" . esc_sql($val) . "'" : 'NULL';
}, $row);
$backup_sql .= "INSERT INTO $table_name VALUES (" . implode(',', $vals) . ");\n";
}
}
$filename = WP_CONTENT_DIR . '/backups/db-backup-' . date('Y-m-d-H-i-s') . '.sql';
file_put_contents($filename, $backup_sql);
}Данная функция создаёт дамп всех таблиц базы данных и сохраняет его в папку wp-content/backups с отметкой времени в имени файла.
Запланируем запуск бэкапа через WP Cron
function wpwebsite_schedule_backup() {
if (!wp_next_scheduled('wpwebsite_daily_backup_event')) {
wp_schedule_event(time(), 'daily', 'wpwebsite_daily_backup_event');
}
}
add_action('wp', 'wpwebsite_schedule_backup');
add_action('wpwebsite_daily_backup_event', 'wpwebsite_backup_database');Этот код проверяет, запланировано ли событие ежедневного бэкапа, и если нет — создаёт его. Затем в указанное время вызывается функция резервного копирования базы данных.
Копирование файлов сайта
Для полного бэкапа нужно сохранять не только базу, но и файлы темы, плагинов, загрузок. Пример простой функции для архивации папки wp-content/uploads в ZIP-архив:
function wpwebsite_backup_uploads_folder() {
$uploads_dir = WP_CONTENT_DIR . '/uploads';
$zip = new ZipArchive();
$zip_filename = WP_CONTENT_DIR . '/backups/uploads-backup-' . date('Y-m-d-H-i-s') . '.zip';
if ($zip->open($zip_filename, ZipArchive::CREATE) === TRUE) {
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($uploads_dir),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $name => $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($uploads_dir) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
}
}Вы можете дополнять функцию wpwebsite_backup_database вызовом этой функции для создания полного архива.
Рекомендации по хранению и безопасности бэкапов
Создавая бэкапы, важно правильно организовать их хранение:
- Не храните резервные копии в открытых папках веб-сервера — доступ к ним должен быть ограничен.
- Регулярно удаляйте старые бэкапы, чтобы не занимать лишнее место.
- Если возможно, отправляйте копии на удалённые хранилища или почту.
- Шифруйте резервные копии, если в них содержатся конфиденциальные данные.
Например, в коде можно добавить функцию очистки папки бэкапов, которая удаляет файлы старше определённого количества дней.
function wpwebsite_cleanup_backups($days = 7) {
$backup_dir = WP_CONTENT_DIR . '/backups';
$files = glob($backup_dir . '/*');
$now = time();
foreach ($files as $file) {
if (is_file($file)) {
if ($now - filemtime($file) > $days * 86400) {
unlink($file);
}
}
}
}
add_action('wpwebsite_daily_backup_event', function() {
wpwebsite_cleanup_backups();
});Заключение
Автоматический бэкап WordPress — обязательная мера для защиты вашего сайта. Используйте готовые плагины для быстрого старта или создавайте собственные решения для гибкой настройки. Не забывайте про безопасность и регулярную проверку резервных копий.