Резервное копирование сайта на WordPress — одна из важнейших задач, которая обеспечивает безопасность данных и возможность быстрого восстановления после сбоев или атак. Многие предпочитают использовать плагины, однако в некоторых случаях это нежелательно из-за нагрузки на сайт или ограничений хостинга. В этой статье подробно разберём, как создать автоматические бэкапы WordPress без плагинов, используя встроенные инструменты сервера и собственные скрипты.
Почему важно автоматизировать резервное копирование WordPress
Ручное создание бэкапов — это долго и ненадёжно. Автоматизация избавляет от риска забыть про копию и гарантирует регулярное сохранение данных. Важно, чтобы в резервной копии были не только файлы, но и база данных, так как вся динамика сайта хранится именно в ней.
Настройка автоматических бэкапов без плагинов поможет снизить нагрузку на сайт, так как плагины могут потреблять ресурсы и замедлять работу. Кроме того, это решение более гибкое и безопасное, так как вы контролируете процесс и формат копий.
Какие данные необходимо резервировать
Для полноценного восстановления сайта потребуется:
- Папка с файлами WordPress —
wp-content(темы, плагины, загрузки) и остальные системные файлы. - Экспорт базы данных MySQL, в которой хранятся посты, страницы, настройки плагинов и прочее.
Обычно для резервного копирования достаточно сохранить wp-content и дамп базы данных, остальные файлы можно восстановить из дистрибутива WordPress.
Шаг 1. Создание скрипта резервного копирования
Для начала напишем простой PHP-скрипт, который будет создавать архив файлов и экспортировать базу данных. Для этого используем стандартные функции PHP и команду mysqldump.
<?php
// Настройки подключения к базе данных
$dbHost = 'localhost';
$dbUser = 'wp_user';
$dbPass = 'password';
$dbName = 'wordpress';
// Пути
$wpContentDir = __DIR__ . '/wp-content';
$backupDir = __DIR__ . '/backups';
if(!is_dir($backupDir)) {
mkdir($backupDir, 0755, true);
}
$date = date('Y-m-d_H-i-s');
// Создаем архив папки wp-content
$zipFile = "$backupDir/wp-content-$date.zip";
$zip = new ZipArchive();
if($zip->open($zipFile, ZipArchive::CREATE) !== true) {
die('Не удалось создать zip архив');
}
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($wpContentDir));
foreach ($files as $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($wpContentDir) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
// Создаем дамп базы данных
$sqlFile = "$backupDir/db-$date.sql";
$command = "mysqldump -h $dbHost -u $dbUser -p$dbPass $dbName > $sqlFile";
exec($command, $output, $return_var);
if($return_var !== 0) {
die('Ошибка при создании дампа базы данных');
}
// Логирование
file_put_contents("$backupDir/backup.log", "$date: Backup completed\n", FILE_APPEND);
echo 'Бэкап успешно создан: ' . $zipFile . ' и ' . $sqlFile;
?>
Обратите внимание, что для выполнения команды mysqldump у пользователя, под которым запускается PHP, должны быть соответствующие права. Также можно запускать скрипт из командной строки для избежания ограничений веб-сервера.
Объяснение кода
Скрипт создает архив ZIP из папки wp-content, что экономит место и сохраняет важные файлы. Далее он экспортирует базу данных с помощью mysqldump. Все резервные копии помещаются в папку backups с отметкой времени. Такой подход упрощает хранение и поиск нужной копии.
Шаг 2. Настройка cron для автоматизации задач
Чтобы бэкапы выполнялись автоматически, настроим задачу cron на сервере Linux. Добавьте в crontab запись:
0 3 * * * /usr/bin/php /путь/к/вашему/скрипту/backup.php > /dev/null 2>&1
Эта команда будет запускать скрипт ежедневно в 3 часа ночи. Вы можете изменить время и частоту по своему усмотрению.
Если у вас нет доступа к crontab, можно использовать планировщик задач на хостинге или аналогичные инструменты.
Шаг 3. Хранение и очистка старых резервных копий
Со временем папка с бэкапами может разрастаться. Рекомендуется добавить в скрипт удаление копий старше определённого времени, например 30 дней.
function wpblog_cleanupBackups($backupDir, $days = 30) {
$files = glob($backupDir . '/*');
$now = time();
foreach ($files as $file) {
if (is_file($file)) {
if ($now - filemtime($file) > 60 * 60 * 24 * $days) {
unlink($file);
}
}
}
}
// Вызов функции в основном скрипте
wpblog_cleanupBackups($backupDir, 30);
Такой подход гарантирует, что на сервере не будут скапливаться старые архивы и не будет занимать лишнее место.
Дополнительные советы и рекомендации по безопасности
При создании резервных копий важно учитывать безопасность:
- Папка с бэкапами не должна быть доступна извне через браузер. Защитите её с помощью
.htaccessили настройками сервера. - Пароль от базы данных храните в отдельном конфигурационном файле с ограниченными правами чтения.
- Регулярно проверяйте целостность и работоспособность резервных копий, восстанавливая тестовый сайт.
- При возможности отправляйте копии на удалённые хранилища (FTP, облако) для дополнительной защиты.
Заключение
Автоматические бэкапы WordPress без плагинов — отличный способ обеспечить безопасность сайта, снизить нагрузку и повысить контроль над процессом. Используя простой PHP-скрипт, cron и стандартные инструменты MySQL, вы получите надежное и гибкое решение.
Если хотите, можете дополнить скрипт функционалом отправки бэкапов на удалённый сервер или email, что сделает вашу систему ещё более надежной.