Зачем нужен автоматический бэкап WordPress
Резервное копирование – важнейшая часть поддержки любого сайта на WordPress. В случае сбоя, взлома или ошибки обновления возможность быстро восстановить работоспособность критична. Многие предпочитают использовать плагины для резервного копирования, но они могут грузить сайт и создавать лишние зависимости. В этой статье мы разберём, как создать автоматический бэкап WordPress без плагинов, используя стандартные средства PHP и планировщик задач сервера (cron).
Подход без плагинов позволяет контролировать процесс, лучше понимать, что и как копируется, и снижает нагрузку на сайт. Такой метод подходит для опытных пользователей и разработчиков, желающих гибко управлять резервным копированием.
Мы рассмотрим:
- Как создать PHP-скрипт для бэкапа базы данных и файлов;
- Как настроить cron для автоматического запуска скрипта;
- Примеры кода с функциями, начинающимися с wprobot_ для удобства;
- Советы по хранению и безопасности резервных копий.
Создание PHP-скрипта для резервного копирования базы данных
Первым этапом резервного копирования является сохранение дампа базы данных MySQL, на которой построен WordPress. Для этого мы напишем функцию wprobot_backup_database(), которая экспортирует базу в SQL-файл.
Пример функции:
function wprobot_backup_database($db_host, $db_user, $db_password, $db_name, $backup_dir) {
$date = date('Y-m-d_H-i-s');
$backup_file = $backup_dir . "/db_backup_" . $date . ".sql";
$command = "mysqldump --user={$db_user} --password={$db_password} --host={$db_host} {$db_name} > {$backup_file}";
exec($command, $output, $return_var);
if ($return_var !== 0) {
throw new Exception('Ошибка при создании дампа базы данных');
}
return $backup_file;
}Обратите внимание, что функция использует команду mysqldump. Для её работы на сервере должен быть установлен MySQL клиент, а PHP должен иметь права на выполнение команд.
Параметры подключения к базе можно получить из файла wp-config.php вашего сайта, чтобы не вводить их вручную.
Получение настроек базы из wp-config.php
Для автоматизации можно динамически подтягивать данные из конфигурации WordPress, например:
require_once('/путь/к/wp-config.php');
$db_host = DB_HOST;
$db_user = DB_USER;
$db_password = DB_PASSWORD;
$db_name = DB_NAME;Это позволит избежать дублирования настроек и ошибок.
Резервное копирование файлов WordPress
Помимо базы, нужно сохранить файлы сайта — темы, плагины, загрузки и ядро. Для этого в PHP-скрипте мы создадим архив ZIP всего каталога WordPress.
Функция wprobot_backup_files() создаст ZIP-архив с нужной директорией:
function wprobot_backup_files($source_dir, $backup_dir) {
$date = date('Y-m-d_H-i-s');
$zip_file = $backup_dir . "/files_backup_" . $date . ".zip";
$zip = new ZipArchive();
if ($zip->open($zip_file, ZipArchive::CREATE) !== TRUE) {
throw new Exception('Не удалось создать ZIP-файл');
}
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($source_dir),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $name => $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($source_dir) + 1);
$zip->addFile($filePath, $relativePath);
}
}
$zip->close();
return $zip_file;
}Важно убедиться, что каталог для резервных копий существует и доступен для записи PHP.
Скрипт для автоматического бэкапа всего сайта
Объединим две функции в один скрипт backup.php:
try {
$backup_dir = '/путь/к/папке/резервных_копий';
if (!file_exists($backup_dir)) {
mkdir($backup_dir, 0755, true);
}
require_once('/путь/к/wp-config.php');
$db_backup = wprobot_backup_database(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, $backup_dir);
$files_backup = wprobot_backup_files('/путь/к/wordpress', $backup_dir);
echo "Резервное копирование завершено успешно:\nФайл базы данных: $db_backup\nФайлы: $files_backup";
} catch (Exception $e) {
echo "Ошибка: " . $e->getMessage();
}Этот скрипт можно запускать вручную или автоматически через планировщик задач сервера.
Настройка cron для автоматического запуска бэкапа
Чтобы бэкап выполнялся регулярно, добавим задачу в cron. Откройте crontab пользователя, под которым работает веб-сервер (например, через команду crontab -e) и добавьте строку:
0 3 * * * /usr/bin/php /путь/к/backup.php >> /путь/к/логам/backup.log 2>&1Это запустит скрипт ежедневно в 3 часа ночи. Логи будут сохраняться в отдельный файл для удобства отладки.
Обязательно проверьте пути к PHP и скрипту, они могут отличаться в зависимости от сервера.
Рекомендации по безопасности и хранению бэкапов
Храните резервные копии вне корневой директории сайта, чтобы к ним нельзя было получить доступ через браузер. Можно использовать отдельный защищённый каталог или внешнее хранилище (FTP, облако).
Регулярно удаляйте старые бэкапы, чтобы не занимать много места жесткого диска. Для этого можно добавить в скрипт очистку файлов старше определённого времени.
function wprobot_cleanup_old_backups($backup_dir, $days = 30) {
$files = glob($backup_dir . '/*');
$now = time();
foreach ($files as $file) {
if (is_file($file) && ($now - filemtime($file)) > ($days * 86400)) {
unlink($file);
}
}
}Заключение: преимущества подхода без плагинов
Используя собственный PHP-скрипт и cron, вы получаете максимальный контроль над процессом резервного копирования. Это снижает нагрузку на сайт и исключает возможные проблемы с несовместимостью плагинов. Подобное решение легко расширить: например, добавить отправку бэкапов на email или облачное хранилище.
Таким образом, создание автоматического бэкапа WordPress без плагинов – практическое и гибкое решение для разработчиков и продвинутых пользователей, которые ценят стабильность и контроль.