Резервное копирование сайта — одна из важнейших задач для любого владельца WordPress-проекта. Автоматизация создания бекапов помогает избежать потери данных из-за ошибок, взломов или сбоев хостинга. В этой статье мы подробно разберем, как правильно настроить автоматическое резервное копирование WordPress, какие плагины использовать и как написать собственный код для создания бэкапов.
Зачем нужна автоматизация резервного копирования WordPress
Резервные копии сайта — это страховка от потери контента, настроек, тем и плагинов. Ручное создание бэкапов — процесс трудоемкий и забываемый, поэтому автоматизация позволяет:
- Регулярно и надежно создавать копии без участия человека;
- Восстанавливать сайт в случае проблем за считанные минуты;
- Защищать данные от повреждений, ошибок обновлений и вредоносных атак;
- Сохранять историю изменений для отката к предыдущим версиям.
Без автоматизации вы рискуете потерять все данные при первом же серьезном сбое.
Популярные плагины для автоматического резервного копирования WordPress
Рассмотрим три проверенных плагина, которые позволяют настроить автоматическое создание бэкапов с минимальными усилиями.
UpdraftPlus — универсальный и удобный
UpdraftPlus — один из самых популярных плагинов для резервного копирования. Позволяет создавать бэкапы базы данных и файлов сайта, хранить их на внешних хранилищах (Google Drive, Dropbox, FTP и др.), а также восстанавливать сайт в пару кликов.
- Настройка расписания автоматических бэкапов;
- Выбор компонентов для резервного копирования;
- Отправка копий на удаленные серверы;
- Пошаговое восстановление через админку.
Для установки достаточно в админке WordPress перейти в Плагины > Добавить новый, ввести «UpdraftPlus» и активировать.
BackWPup — гибкие настройки и много форматов
BackWPup позволяет не только создавать полные копии сайта, но и выполнять оптимизацию базы данных, проверку ошибок и отправлять архивы в несколько облаков.
- Поддержка форматов ZIP, TAR, TAR.GZ;
- Настраиваемые расписания;
- Отправка на FTP, Dropbox, Amazon S3, Microsoft Azure и другие сервисы;
- Создание отчетов работы плагина.
WP Time Capsule — инкрементальное резервное копирование
WP Time Capsule отличается тем, что создает копии только измененных файлов и базы данных, что экономит место и ускоряет процесс.
- Инкрементальные бэкапы;
- Восстановление сайта «на лету» без прерывания работы;
- Интеграция с Google Drive, Dropbox, OneDrive;
- Мониторинг активности сайта и создание копий после обновлений.
Как написать собственный плагин для автоматического резервного копирования WordPress
Если вы хотите контролировать процесс бэкапа более детально, можно написать свой простой плагин, который будет создавать резервную копию базы данных и сохранять её на сервере.
Ниже пример минимального кода плагина wplessons_backup, который создаст дамп базы данных и сохранит его в папку /wp-content/backups по расписанию.
<?php
/*
Plugin Name: WP Lessons Backup
Description: Автоматическое резервное копирование базы данных WordPress.
Version: 1.0
Author: WP Lessons
*/
register_activation_hook(__FILE__, 'wplessons_backup_activate');
register_deactivation_hook(__FILE__, 'wplessons_backup_deactivate');
function wplessons_backup_activate() {
if (!wp_next_scheduled('wplessons_backup_cron')) {
wp_schedule_event(time(), 'daily', 'wplessons_backup_cron');
}
}
function wplessons_backup_deactivate() {
wp_clear_scheduled_hook('wplessons_backup_cron');
}
add_action('wplessons_backup_cron', 'wplessons_backup_create');
function wplessons_backup_create() {
global $wpdb;
$backup_dir = WP_CONTENT_DIR . '/backups';
if (!file_exists($backup_dir)) {
wp_mkdir_p($backup_dir);
}
$filename = $backup_dir . '/db-backup-' . date('Y-m-d-H-i-s') . '.sql';
$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 .= "DROP TABLE IF EXISTS `$table_name`;
";
$sql_dump .= $create_table[1] . ";
";
$rows = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);
foreach ($rows as $row) {
$columns = array_map(function($col) { return "`" . $col . "`"; }, array_keys($row));
$values = array_map(array($wpdb, 'escape'), array_values($row));
$values = array_map(function($val) { return isset($val) ? "'" . addslashes($val) . "'" : 'NULL'; }, $values);
$sql_dump .= "INSERT INTO `$table_name` (" . implode(',', $columns) . ") VALUES (" . implode(',', $values) . ");
";
}
$sql_dump .= "
";
}
file_put_contents($filename, $sql_dump);
}
?>Этот код:
- Создает задачу cron, которая срабатывает ежедневно;
- Выполняет дамп всех таблиц базы в SQL-файл;
- Сохраняет файл с датой и временем в папку
wp-content/backups; - Автоматически создает папку, если ее нет.
Этот пример можно расширить добавлением отправки архива на удаленный сервер, уведомлений или удаления старых бэкапов.
Как настроить задачи cron в WordPress для резервного копирования
WordPress использует свой собственный механизм WP-Cron для выполнения отложенных задач. Он запускается при посещении сайта, что не всегда удобно. Чтобы обеспечить стабильность создания бэкапов:
- Отключите wp-cron, добавив в
wp-config.phpстрокуdefine('DISABLE_WP_CRON', true);; - Настройте системный cron на сервере, который будет запускать скрипт
wp-cron.phpпо нужному расписанию, например, каждую ночь; - Это обеспечит точное время запуска задач и снизит нагрузку.
Пример записи для cron на Linux:
0 2 * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1<Рекомендации по хранению и безопасности резервных копий
Создание бэкапов — только половина дела. Важно правильно хранить копии и защищать их:
- Не храните бэкапы в открытом доступе в корне сайта — создайте защищенную папку;
- Используйте шифрование и пароли для архивов;
- Храните копии на удаленных серверах или в облаках (Google Drive, Dropbox, Amazon S3 и т.д.);
- Регулярно проверяйте возможность восстановления из бэкапов, чтобы не столкнуться с проблемами;
- Автоматизируйте удаление старых резервных копий, чтобы не занимать лишнее место.
Соблюдение этих правил значительно повысит безопасность вашего сайта и избавит от потерь данных.