Резервное копирование — одна из важнейших задач при управлении сайтом на WordPress. В этой статье мы подробно разберём, как настроить автоматическое резервное копирование, используя как готовые решения, так и собственные скрипты на PHP. Это поможет сохранить контент, базу данных и настройки вашего сайта в безопасности и быстро восстановить их при необходимости.
Почему важно автоматическое резервное копирование WordPress
Резервные копии позволяют защитить сайт от потери данных из-за взлома, ошибок обновления, сбоев хостинга или случайных удалений. Автоматизация процесса избавляет от необходимости помнить о регулярном сохранении вручную.
Основные объекты для бэкапа: база данных MySQL и файлы WordPress (темы, плагины, медиафайлы).
В идеале стоит хранить копии на удалённом сервере или в облачном хранилище, чтобы избежать потери данных при проблемах с основным сервером.
Популярные плагины для автоматического резервного копирования WordPress
UpdraftPlus
Один из самых популярных и надёжных плагинов для бэкапа. Позволяет автоматически создавать резервные копии базы данных и файлов, а также загружать их на облачные хранилища (Google Drive, Dropbox, Amazon S3 и др.).
Пример настройки:
- Установите и активируйте плагин через админку WordPress.
- Перейдите в Настройки > UpdraftPlus Backup.
- Настройте расписание резервного копирования (например, ежедневно для базы и еженедельно для файлов).
- Выберите удалённое хранилище и подключите его.
- Сохраните настройки и запустите тестовое резервное копирование.
BackWPup
Ещё один мощный плагин, позволяющий делать полный бэкап сайта с возможностью выгрузки в Dropbox, FTP, Amazon S3 и другие сервисы.
Отличается гибкими настройками и возможностью создавать задачи по расписанию с различными условиями.
WP Time Capsule
Работает по принципу инкрементальных бэкапов — сохраняет только изменения, что экономит место и время. Хорошо подходит для сайтов с частыми изменениями.
Как реализовать простое автоматическое резервное копирование своими силами
Если вы хотите обойтись без плагинов или добавить резервное копирование в кастомный плагин, можно написать простой скрипт на PHP, который будет сохранять базу данных и файлы в архив.
Резервное копирование базы данных
Пример функции для экспорта базы данных MySQL:
function wpdemo_backup_database() {
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) {
$values = array_map(function($value) use ($wpdb) {
return is_null($value) ? 'NULL' : $wpdb->prepare('%s', $value);
}, array_values($row));
$sql_dump .= "INSERT INTO {$table_name} VALUES(" . implode(',', $values) . ");\n";
}
$sql_dump .= "\n";
}
$backup_file = WP_CONTENT_DIR . '/backups/db_backup_' . date('Y-m-d_H-i-s') . '.sql';
file_put_contents($backup_file, $sql_dump);
return $backup_file;
}Этот код создаст SQL дамп всей базы и сохранит его в папку wp-content/backups. Не забудьте создать эту папку и дать права на запись.
Архивирование файлов сайта
Для создания архива с файлами темы, плагинов и медиа можно использовать встроенный класс ZipArchive:
function wpdemo_backup_files($source_dir) {
$zip = new ZipArchive();
$backup_file = WP_CONTENT_DIR . '/backups/files_backup_' . date('Y-m-d_H-i-s') . '.zip';
if ($zip->open($backup_file, ZipArchive::CREATE) !== TRUE) {
return false;
}
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source_dir));
foreach ($files as $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($source_dir) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
return $backup_file;
}Пример вызова для бэкапа папки с темами:
$backup_files = wpdemo_backup_files(WP_CONTENT_DIR . '/themes');
if ($backup_files) {
echo 'Файлы успешно заархивированы: ' . $backup_files;
} else {
echo 'Ошибка при создании архива';
}Автоматизация запуска резервного копирования через WP-Cron
Чтобы резервное копирование происходило автоматически, зарегистрируем свою задачу в WP-Cron.
add_action('wpdemo_daily_backup_event', 'wpdemo_daily_backup_function');
function wpdemo_activate_backup_cron() {
if (!wp_next_scheduled('wpdemo_daily_backup_event')) {
wp_schedule_event(time(), 'daily', 'wpdemo_daily_backup_event');
}
}
register_activation_hook(__FILE__, 'wpdemo_activate_backup_cron');
function wpdemo_deactivate_backup_cron() {
$timestamp = wp_next_scheduled('wpdemo_daily_backup_event');
wp_unschedule_event($timestamp, 'wpdemo_daily_backup_event');
}
register_deactivation_hook(__FILE__, 'wpdemo_deactivate_backup_cron');
function wpdemo_daily_backup_function() {
$db_backup = wpdemo_backup_database();
$files_backup = wpdemo_backup_files(WP_CONTENT_DIR);
// Можно добавить логику отправки файлов на удалённый сервер или облако
}Таким образом, каждый день будет создаваться новый бэкап базы и файлов.
Отправка резервных копий на удалённое хранилище
Хранение копий на сервере может быть рискованным, поэтому рекомендуется выгружать их в облако или на FTP.
Для автоматизации можно использовать плагин UpdraftPlus с настройкой удалённого хранилища, либо интегрировать API Google Drive, Dropbox и других сервисов в свою функцию.
Пример отправки файла на FTP с помощью PHP:
function wpdemo_ftp_upload($local_file, $remote_file) {
$ftp_server = 'ftp.example.com';
$ftp_user = 'username';
$ftp_pass = 'password';
$conn_id = ftp_connect($ftp_server);
if (!$conn_id) return false;
$login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
if (!$login_result) {
ftp_close($conn_id);
return false;
}
ftp_pasv($conn_id, true);
$upload = ftp_put($conn_id, $remote_file, $local_file, FTP_BINARY);
ftp_close($conn_id);
return $upload;
}Добавьте вызов этой функции после создания резервной копии для выгрузки её на удалённый сервер.
Практические рекомендации по настройке резервного копирования
- Храните резервные копии минимум за 7-14 дней, чтобы иметь возможность откатиться на нужную дату.
- Регулярно проверяйте целостность и возможность восстановления из резервных копий.
- Используйте разные места хранения (локальный сервер + облако/FTP).
- Автоматизируйте процессы, чтобы минимизировать человеческий фактор.
- Следите за размером копий и очищайте устаревшие файлы.
Заключение
Автоматическое резервное копирование — необходимая часть администрирования любого WordPress-сайта. Используйте проверенные плагины типа UpdraftPlus или создавайте собственные решения с помощью приведённых в статье примеров кода. Главное — обеспечить регулярность, надёжность и безопасность хранения ваших данных.