Почему важно настроить автоматическое резервное копирование WordPress
Резервное копирование сайта — это обязательная часть технического обслуживания любого проекта на WordPress. Если в какой-то момент вы столкнётесь с ошибками обновлений, взломами или случайным удалением важных данных, бэкап поможет быстро восстановить работоспособность сайта без потери информации.
Автоматизация процесса резервного копирования позволяет не думать о регулярных сохранениях и минимизирует риски. В этой статье мы подробно разберём, как создать собственную функцию для автоматического резервного копирования базы данных и файлов WordPress, а также рассмотрим популярные плагины, которые помогут сделать это без лишних усилий.
На wpmanager.ru мы часто сталкиваемся с запросами, как именно реализовать стабильное резервное копирование при минимальных затратах ресурсов сервера, поэтому делимся проверенными практическими решениями.
Основные компоненты автоматического резервного копирования в WordPress
Для полноценного бэкапа сайта важно сохранить две ключевые части:
- База данных — все записи, страницы, настройки, контент и пользовательские данные хранятся в MySQL.
- Файлы сайта — темы, плагины, загруженные медиафайлы и другие ресурсы.
Идеальный скрипт или плагин должен обеспечивать резервное копирование и того, и другого. Кроме того, желательно хранить бэкапы в удалённом хранилище, например, на Dropbox, Google Drive или Amazon S3, чтобы уберечь данные от потери при сбое сервера.
Как создать функцию автоматического резервного копирования базы данных WordPress
Для начала разберёмся, как программно сохранить копию базы данных. Мы напишем функцию wpmanager_backup_database(), которая экспортирует текущую базу в SQL-файл и сохраняет его в каталог wp-content/backups.
Для безопасности создайте папку backups с правами записи и запретом на выполнение файлов.
function wpmanager_backup_database() {
global $wpdb;
$timestamp = date('Y-m-d-H-i-s');
$backup_dir = WP_CONTENT_DIR . '/backups';
if (!file_exists($backup_dir)) {
wp_mkdir_p($backup_dir);
}
$filename = $backup_dir . '/db-backup-' . $timestamp . '.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 .= "\nDROP TABLE IF EXISTS `$table_name`;\n";
$sql_dump .= $create_table[1] . ";\n\n";
$rows = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);
foreach ($rows as $row) {
$values = array_map(array($wpdb, 'escape'), array_values($row));
$values = array_map(function($val) { return "'" . str_replace("'", "\\'", $val) . "'"; }, $values);
$sql_dump .= "INSERT INTO `$table_name` VALUES(" . implode(',', $values) . ");\n";
}
$sql_dump .= "\n\n";
}
file_put_contents($filename, $sql_dump);
return $filename;
}Эта функция по шагам:
- Получает список всех таблиц из базы.
- Для каждой таблицы получает SQL для создания структуры.
- Экспортирует все данные таблицы в INSERT-запросах.
- Сохраняет результат в SQL-файл с отметкой времени.
Обратите внимание, что для больших баз данных такой экспорт может занять значительное время и потребовать увеличения лимитов PHP.
Автоматизация запуска резервного копирования с помощью WP-Cron
Чтобы не запускать функцию вручную, можно настроить WP-Cron для автоматического выполнения задачи по расписанию. Добавьте следующий код в файл functions.php темы или собственный плагин:
function wpmanager_schedule_backup() {
if (!wp_next_scheduled('wpmanager_database_backup_event')) {
wp_schedule_event(time(), 'daily', 'wpmanager_database_backup_event');
}
}
add_action('wp', 'wpmanager_schedule_backup');
function wpmanager_run_backup() {
$backup_file = wpmanager_backup_database();
// Здесь можно добавить отправку файла на почту или в облако
}
add_action('wpmanager_database_backup_event', 'wpmanager_run_backup');Этот код:
- Проверяет, запланирована ли ежедневная задача резервного копирования.
- Если нет — ставит её в очередь.
- Выполняет резервное копирование базы по событию.
Вы можете изменить интервал с daily на twicedaily или hourly по необходимости.
Как сделать резервное копирование файлов сайта WordPress
Резервное копирование только базы — недостаточно, так как важны также темы, плагины и загруженные медиафайлы. Для этого можно использовать PHP-функцию для архивирования каталога wp-content в ZIP-файл.
function wpmanager_backup_files() {
$zip = new ZipArchive();
$timestamp = date('Y-m-d-H-i-s');
$backup_dir = WP_CONTENT_DIR . '/backups';
if (!file_exists($backup_dir)) {
wp_mkdir_p($backup_dir);
}
$zip_filename = $backup_dir . '/files-backup-' . $timestamp . '.zip';
if ($zip->open($zip_filename, ZipArchive::CREATE) !== TRUE) {
return false;
}
$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();
return $zip_filename;
}Вы можете объединить функции резервного копирования базы и файлов в одну задачу, чтобы получать полный бэкап сайта.
Рекомендации по хранению и автоматическому удалению старых бэкапов
Папка с бэкапами может со временем засориться старыми файлами, что создаст проблемы с дисковым пространством. Рекомендуется реализовать очистку резервных копий старше определённого срока, например, 14 дней.
function wpmanager_cleanup_old_backups($days = 14) {
$backup_dir = WP_CONTENT_DIR . '/backups';
if (!is_dir($backup_dir)) return;
$files = glob($backup_dir . '/*');
$now = time();
foreach ($files as $file) {
if (is_file($file)) {
if ($now - filemtime($file) >= 60 * 60 * 24 * $days) {
unlink($file);
}
}
}
}Запускайте эту функцию после создания нового бэкапа — так вы будете поддерживать хранилище в порядке.
Популярные плагины для автоматического резервного копирования WordPress
UpdraftPlus
Самый популярный бесплатный плагин с возможностью автоматического резервного копирования базы и файлов. Поддерживает загрузку бэкапов на Dropbox, Google Drive, Amazon S3 и многие другие сервисы. Есть опция шифрования и планировщик.
WPvivid Backup
Простой плагин с удобным интерфейсом, позволяющий создавать полные бэкапы и восстанавливать их. Поддерживает автоматическое расписание и хранение копий в облаках.
Clearfy Pro
Помимо оптимизации, в Clearfy Pro есть модуль для резервного копирования и восстановления данных, который можно интегрировать в процессы управления сайтом.
Как отправлять резервные копии на удалённые хранилища
Хранение бэкапов на том же сервере — рискованно. Чтобы повысить надёжность, полезно отправлять файлы в облако. Рассмотрим пример отправки SQL-резервной копии на Google Drive с помощью PHP-библиотеки Google API Client.
Для этого понадобится:
- Создать проект и учётные данные в Google Cloud Console;
- Установить библиотеку
google/apiclientчерез Composer; - Настроить OAuth-авторизацию;
- Вызвать загрузку файла после создания резервной копии.
Полный код реализации выходит за рамки статьи, но базу для интеграции можно взять в официальной документации Google: Google Drive API PHP Quickstart.
Заключение по созданию автоматического резервного копирования
Автоматическое резервное копирование — ключевой элемент безопасности любого сайта. Реализовав собственные функции, вы получите гибкий инструмент, который можно адаптировать под свои задачи и интегрировать с внешними сервисами. Для быстрого старта также можно использовать проверенные плагины из каталога WordPress, например, UpdraftPlus или Clearfy Pro.
Поддерживайте регулярные бэкапы, чтобы защитить свой проект от непредвиденных сбоев и потерь данных.