Резервное копирование сайта — одна из важнейших задач для любого владельца WordPress-проекта. Если что-то пойдет не так — обновление, взлом или ошибка плагина — без свежей резервной копии можно потерять все данные. В этой статье мы подробно разберем, как автоматизировать создание резервных копий WordPress, чтобы не тратить время на ручные операции и быть уверенным в безопасности сайта.
Почему автоматизация резервного копирования в WordPress важна
Многие администраторы сайтов делают резервные копии вручную, что не всегда удобно и надежно. Автоматизация позволяет:
- Создавать копии по расписанию без вашего участия.
- Хранить бэкапы в удаленных местах — на облачных сервисах, FTP или других серверах.
- Автоматически удалять старые копии, чтобы не занимать место.
- Интегрировать процесс с уведомлениями, чтобы знать о статусе резервного копирования.
Все это значительно снижает риски и экономит время.
Плагины для автоматического резервного копирования WordPress
Рассмотрим несколько популярных и надежных плагинов, которые помогут настроить автоматическое резервное копирование.
1. UpdraftPlus
Один из самых популярных плагинов для бэкапов — прост в настройке и умеет сохранять копии на различные облачные сервисы (Google Drive, Dropbox, Amazon S3 и др.).
- Можно задать расписание для файлов и базы данных.
- Поддерживает автоматическое удаление старых копий.
- Есть бесплатная и платная версия с дополнительными функциями.
Настройка сводится к выбору расписания и места хранения копий.
2. BackWPup
Еще один популярный плагин с широкими возможностями:
- Резервное копирование базы данных, файлов, плагинов, тем.
- Экспорт в архив ZIP, TAR или TAR.GZ.
- Отправка бэкапов на Dropbox, FTP, Amazon S3, Microsoft Azure и др.
- Планировщик задач встроенный.
3. WP Time Capsule
Плагин ориентирован на инкрементальные бэкапы — сохраняет только новые изменения, что экономит место и трафик. Поддерживает интеграцию с Google Drive, Dropbox и Amazon S3.
Как настроить автоматическое резервное копирование без плагинов: пример кода
Если вы хотите более гибко контролировать процесс, можно написать собственный скрипт для создания резервных копий и запускать его по крону. Ниже показан пример функции для создания архива сайта и экспорта базы данных.
function wptour_create_backup() {
$upload_dir = wp_upload_dir();
$backup_dir = $upload_dir['basedir'] . '/wptour_backups';
if ( ! file_exists( $backup_dir ) ) {
mkdir( $backup_dir, 0755, true );
}
$date = date('Y-m-d_H-i-s');
$zip_file = $backup_dir . "/backup-{$date}.zip";
$zip = new ZipArchive();
if ( $zip->open( $zip_file, ZipArchive::CREATE ) === TRUE ) {
// Добавляем файлы сайта
$dir = ABSPATH;
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($files as $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($dir));
$zip->addFile($filePath, $relativePath);
}
}
// Экспорт базы данных
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 .= "DROP 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 = implode("','", $values);
$sql_dump .= "INSERT INTO `{$table_name}` VALUES ('{$values}');\n";
}
$sql_dump .= "\n\n";
}
$zip->addFromString('database_backup.sql', $sql_dump);
$zip->close();
}
}
// Запуск функции по расписанию через WP Cron
if ( ! wp_next_scheduled( 'wptour_daily_backup' ) ) {
wp_schedule_event( time(), 'daily', 'wptour_daily_backup' );
}
add_action( 'wptour_daily_backup', 'wptour_create_backup' );Этот код создаёт ZIP-архив с файлами сайта и дампом базы данных, сохраняет его в директорию загрузок и запускается ежедневно через WP Cron. Конечно, для больших сайтов стоит доработать фильтры файлов и оптимизировать экспорт базы.
Где хранить резервные копии: облака и удалённые серверы
Хранение резервных копий только на том же сервере — рискованно. Лучше использовать удалённые хранилища:
- Google Drive и Dropbox — удобны для интеграции с плагинами и обеспечивают быстрый доступ.
- Amazon S3 и DigitalOcean Spaces — подходят для профессиональных проектов с большими объемами данных.
- Удалённый FTP или SFTP сервер — классический вариант, если у вас есть доступ к отдельному серверу.
Для автоматической загрузки в облако можно использовать готовые возможности плагинов или написать собственный код с использованием API соответствующих сервисов.
Пример загрузки файла на Google Drive с помощью Google API PHP Client
Для интеграции с Google Drive потребуется настроить OAuth 2.0 и скачать клиентские библиотеки. Ниже пример загрузки файла:
function wptour_upload_to_gdrive($file_path) {
require_once 'vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfig('credentials.json');
$client->addScope(Google_Service_Drive::DRIVE_FILE);
$service = new Google_Service_Drive($client);
$file = new Google_Service_Drive_DriveFile();
$file->setName(basename($file_path));
$content = file_get_contents($file_path);
$service->files->create($file, [
'data' => $content,
'mimeType' => 'application/zip',
'uploadType' => 'multipart'
]);
}Эту функцию можно вызывать после создания резервной копии, чтобы сразу отправлять архив в облако.
Советы по управлению резервными копиями и безопасности
Ниже несколько рекомендаций, которые помогут сделать процесс резервного копирования надежным:
- Храните не менее трёх последних копий и удаляйте старые.
- Шифруйте резервные копии, если в них содержатся чувствительные данные.
- Регулярно проверяйте восстановление из резервных копий на тестовом сервере.
- Используйте отдельные учётные записи и ключи доступа для облачных сервисов.
Автоматизация и правильное хранение резервных копий — залог стабильности вашего сайта.