Регулярное создание резервных копий сайта — одна из главных задач для каждого администратора WordPress. Часто для этого устанавливают плагины, но лишние расширения могут замедлять сайт и создавать дополнительные риски безопасности. В этой статье мы подробно разберём, как настроить автоматическое создание бекапов WordPress без использования плагинов, используя только стандартные возможности хостинга и WP.
Почему важно делать автоматические бекапы WordPress
Ни одна CMS, включая WordPress, не застрахована от сбоев, взломов или ошибок обновлений. Если что-то пойдёт не так, без актуальной резервной копии можно потерять весь сайт или важные данные. Автоматизация процесса бекапа помогает не забывать делать копии и сохранять историю изменений.
Встроенные возможности WordPress не предусматривают автоматические бекапы, но мы можем использовать PHP-скрипты, WP-CLI и стандартный планировщик задач сервера (cron) для решения этой задачи.
Настройка скрипта для бекапа базы данных и файлов WordPress
Бекап базы данных через PHP
Самый важный элемент — база данных, где хранятся все записи, настройки и контент. Вот пример простого PHP-скрипта для экспорта базы данных:
<?php
// wphelper_backup_db.php
// Данные для подключения к базе из wp-config.php
$db_host = 'localhost';
$db_name = 'wp_database';
$db_user = 'wp_user';
$db_pass = 'wp_password';
// Имя файла с датой
$backup_file = __DIR__ . '/backups/db_backup_' . date('Y-m-d_H-i-s') . '.sql';
// Команда mysqldump (нужно, чтобы на сервере была утилита)
$command = "mysqldump --user={$db_user} --password={$db_pass} --host={$db_host} {$db_name} > {$backup_file}";
exec($command, $output, $return_var);
if ($return_var === 0) {
echo "Резервная копия базы данных успешно создана: {$backup_file}";
} else {
echo "Ошибка создания резервной копии базы данных.";
}
?>
Обратите внимание, что для этого скрипта на сервере должна быть доступна команда mysqldump. Если доступа нет, ниже приведём альтернативный способ через WP-CLI.
Бекап файлов WordPress с помощью PHP
Файлы сайта — темы, плагины, медиа — тоже нужно сохранять. Для этого можно создать архив папки wp-content и других важных директорий:
<?php
// wphelper_backup_files.php
$source = __DIR__ . '/wp-content';
$zip_file = __DIR__ . '/backups/wp-content_backup_' . date('Y-m-d_H-i-s') . '.zip';
$zip = new ZipArchive();
if ($zip->open($zip_file, ZipArchive::CREATE) === TRUE) {
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($source),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $name => $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($source) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
echo "Архив wp-content создан: {$zip_file}";
} else {
echo "Ошибка создания архива.";
}
?>
Такой архив можно расширить, добавив каталоги wp-includes или корень сайта, исключая wp-config.php и другие чувствительные файлы, если нужно.
Автоматизация через cron на сервере
Чтобы бекапы создавались автоматически, достаточно добавить задания в планировщик cron, который есть почти на всех Linux-хостингах.
Пример записи в crontab для ежедневного запуска скриптов в 3:00 утра:
0 3 * * * /usr/bin/php /путь/к/вашему/сайту/wphelper_backup_db.php
0 3 * * * /usr/bin/php /путь/к/вашему/сайту/wphelper_backup_files.php
Путь к PHP и скриптам нужно заменить на реальные из вашей среды. После настройки cron резервные копии будут появляться в папке backups автоматически.
Использование WP-CLI для резервного копирования базы данных
Если на сервере установлен WP-CLI, это удобный инструмент для работы с WordPress из командной строки. Создать дамп базы можно так:
wp db export /путь/к/вашему/сайту/backups/db_backup_$(date +'%Y-%m-%d_%H-%M-%S').sql --add-drop-table
Это проще и надёжнее, чем mysqldump, поскольку использует настройки из wp-config.php и совместим с мультисайтами.
Можно написать bash-скрипт, который запускает WP-CLI экспорт и архивирование файлов, и добавить его в cron.
Пример комплексного bash-скрипта для автоматического бекапа
#!/bin/bash
BACKUP_DIR="/путь/к/вашему/сайту/backups"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
# Бекап базы
wp db export "$BACKUP_DIR/db_backup_$DATE.sql" --add-drop-table
# Архив wp-content
zip -r "$BACKUP_DIR/wp-content_backup_$DATE.zip" wp-content
# Удаление бекапов старше 14 дней
find "$BACKUP_DIR" -type f -mtime +14 -exec rm {} \;
Такой скрипт можно запускать по расписанию, чтобы всегда иметь свежие копии и не забивать место на диске.
Советы по хранению и безопасности резервных копий
Резервные копии — это конфиденциальные данные, в них содержатся пароли, настройки и полный контент сайта. Обязательно:
- Храните бекапы в отдельной папке с правильными правами доступа (например,
chmod 700). - Сохраняйте копии за пределами корня сайта, чтобы их нельзя было скачать через браузер.
- Регулярно копируйте резервные копии на удалённые сервисы (FTP, облако, Google Drive, Amazon S3).
- Периодически проверяйте целостность и возможность восстановления из резервных копий.
Для автоматической отправки копий в облако можно использовать скрипты с утилитами rclone или aws cli, что значительно повысит надёжность хранения.
Заключение
Автоматическое создание бекапов WordPress без плагинов — вполне реализуемая задача, если грамотно использовать возможности сервера и WordPress. Такой подход снижает нагрузку на сайт, уменьшает риски безопасности и обеспечивает стабильность работы вашего проекта.
Если хотите расширить функционал, обратите внимание на плагины из каталога WPSHOP, которые могут помочь с управлением бекапами и оптимизацией.