Резервное копирование сайта — одна из важнейших задач для любого владельца WordPress-сайта. Без регулярных бэкапов риски потерять данные из-за взлома, ошибки обновления или сбоя сервера значительно возрастают. В этой статье мы подробно разберём, как настроить автоматическое создание резервных копий WordPress, используя популярные плагины, а также рассмотрим пример кастомного решения с помощью PHP.
Почему важны автоматические резервные копии WordPress
Ручное создание резервных копий — процесс трудоёмкий и легко забываемый. Автоматизация бэкапов гарантирует, что данные сайта будут сохранены регулярно без вашего постоянного участия. Это особенно важно для сайтов с частыми обновлениями контента или большим количеством пользователей.
Кроме того, регулярные резервные копии позволяют быстро восстановить сайт после проблем, минимизируя время простоя и потерю данных.
В идеале, бэкапы должны храниться не только на сервере, но и в удалённых хранилищах — облаках, FTP или внешних дисках.
Лучшие плагины для автоматического резервного копирования WordPress
UpdraftPlus — универсальное решение для резервных копий
UpdraftPlus — один из самых популярных и надёжных плагинов для создания бэкапов. Он поддерживает автоматическое резервное копирование по расписанию, позволяет сохранять копии на удалённые хранилища (Google Drive, Dropbox, Amazon S3 и др.) и быстро восстанавливать сайт.
Настройка UpdraftPlus проста: после установки в настройках плагина указываете расписание, выбираете удалённое хранилище и запускаете первый бэкап.
Преимущества:
- Интуитивно понятный интерфейс;
- Поддержка мультисайтов;
- Возможность резервного копирования базы данных и файлов отдельно;
- Шифрование бэкапов.
BackWPup — гибкость и множество опций
BackWPup также широко используется для создания резервных копий с возможностью автоматизации. Главные особенности — поддержка различных форматов экспорта (ZIP, TAR), возможность отправки бэкапов на FTP, Dropbox, S3 и др.
Плагин позволяет создавать задания по расписанию, выбирать, что именно копировать — базу данных, файлы, плагины и темы.
Для автоматизации достаточно настроить задания и включить расписание в настройках.
Пример кастомного решения для автоматического создания резервных копий
Если вы хотите более гибко контролировать процесс резервного копирования или минимизировать использование плагинов, можно написать собственную функцию для создания бэкапов базы данных и файлов с последующей отправкой на удалённый сервер или сохранением на диск.
Ниже пример функции, которая создаёт дамп базы данных и архивирует директорию wp-content, а затем сохраняет архив в папку backups в корне сайта.
function wpeducation_create_backup() {
global $wpdb;
$backup_dir = ABSPATH . 'backups/';
if (!file_exists($backup_dir)) {
mkdir($backup_dir, 0755, true);
}
$date = date('Y-m-d_H-i-s');
$db_file = $backup_dir . 'db_backup_' . $date . '.sql';
$zip_file = $backup_dir . 'wp-content_backup_' . $date . '.zip';
// Создание дампа базы данных
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
$dump = '';
foreach ($tables as $table) {
$table_name = $table[0];
$create = $wpdb->get_row("SHOW CREATE TABLE $table_name", ARRAY_N);
$dump .= "DROP TABLE IF EXISTS $table_name;\n";
$dump .= $create[1] . ";\n\n";
$rows = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);
foreach ($rows as $row) {
$values = array_map(function($value) use ($wpdb) {
return isset($value) ? '"' . esc_sql($value) . '"' : 'NULL';
}, $row);
$dump .= "INSERT INTO $table_name VALUES(" . implode(',', $values) . ");\n";
}
$dump .= "\n";
}
file_put_contents($db_file, $dump);
// Архивирование wp-content
$zip = new ZipArchive();
if ($zip->open($zip_file, ZipArchive::CREATE) === TRUE) {
$path = WP_CONTENT_DIR;
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
foreach ($files as $name => $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($path) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
}
}
// Запланировать ежедневное выполнение
if (!wp_next_scheduled('wpeducation_daily_backup')) {
wp_schedule_event(time(), 'daily', 'wpeducation_daily_backup');
}
add_action('wpeducation_daily_backup', 'wpeducation_create_backup');Этот код создаёт SQL-файл с дампом всех таблиц и ZIP-архив с содержимым wp-content. Затем файл сохраняется в папке backups. Для запуска резервного копирования ежедневно используется WP-Cron.
Данный пример можно расширить, добавив отправку архивов на облачные сервисы через API или по FTP.
Рекомендации по хранению и безопасности резервных копий
Очень важно хранить резервные копии вне корневой директории сайта, чтобы они не были доступны извне. В нашем примере папка backups находится в корне сайта, что не оптимально для безопасности — рекомендуется хранить бэкапы вне веб-доступа или использовать .htaccess для запрета доступа.
Также стоит регулярно проверять целостность и работоспособность резервных копий, а время от времени восстанавливать сайт на тестовом сервере, чтобы убедиться в качестве бэкапов.
Для автоматизации хранения используйте возможность плагинов отправлять копии на удалённые хранилища, где они будут защищены от потери при повреждении хостинга.
Выводы и лучшие практики автоматического бэкапа WordPress
Резервное копирование — это не опция, а необходимость для любого сайта. Автоматизация позволяет снизить человеческий фактор и обеспечить регулярность сохранения данных.
Самый простой путь — использовать популярные плагины, такие как UpdraftPlus или BackWPup, которые предоставляют мощный функционал без необходимости программирования.
Для опытных разработчиков возможно написание кастомных скриптов, которые учитывают особенности сайта и позволяют интегрировать бэкапы в сложные процессы деплоя и поддержки.
Независимо от выбранного способа, не забывайте о безопасности и тестировании резервных копий.