Резервное копирование — одна из важнейших задач для любого сайта на WordPress. Большинство пользователей для этого используют плагины, но иногда хочется обойтись без них: чтобы не нагружать систему, избежать конфликтов или иметь полный контроль над процессом. В этой статье я расскажу, как настроить автоматическое создание резервной копии WordPress без использования сторонних плагинов, используя только стандартные инструменты сервера и PHP-код.
Почему стоит создавать резервные копии вручную через код и cron
Автоматизация резервного копирования с помощью плагинов удобна, но не всегда оптимальна. Плагины могут увеличить нагрузку, влиять на скорость сайта и иногда вызывают конфликты с другими расширениями. Кроме того, зависимость от плагинов — это еще один уровень риска, если разработчик перестанет поддерживать плагин.
Настройка собственного скрипта резервного копирования позволяет:
- Контролировать, какие именно данные и файлы копируются.
- Оптимизировать процесс под нужды вашего хостинга.
- Избежать лишних зависимостей.
- Автоматизировать процесс через системный cron, что надежнее и эффективнее.
Как правило, для сайта WordPress важны две части: база данных и папка с файлами (wp-content, темы, плагины и т.д.). Мы разберем, как создавать копии и тех, и других.
Создаем PHP-скрипт для резервного копирования базы данных
Для резервного копирования базы данных используется команда mysqldump, которую можно вызвать через PHP-функцию exec(). Важно, чтобы на сервере был доступ к этой команде. Ниже пример функции для резервного копирования базы данных WordPress:
function wptips_backup_database() {
$db_name = DB_NAME;
$db_user = DB_USER;
$db_pass = DB_PASSWORD;
$db_host = DB_HOST;
// Путь для сохранения резервной копии
$backup_dir = __DIR__ . '/backups';
if (!file_exists($backup_dir)) {
mkdir($backup_dir, 0755, true);
}
$date = date('Y-m-d_H-i-s');
$backup_file = "$backup_dir/db_backup_$date.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) {
error_log("[wptips_backup_database] Ошибка создания резервной копии базы данных");
return false;
}
return $backup_file;
}Обратите внимание, что в этом примере используются константы WordPress из wp-config.php. Этот скрипт можно положить, например, в отдельный файл backup.php в корне сайта.
Копирование файлов WordPress с помощью PHP
Резервное копирование папки с файлами — более ресурсоемкий процесс, особенно если сайт большой. Чтобы избежать длительных зависаний, лучше архивировать папку с помощью системной команды tar или zip. Пример создания архива wp-content:
function wptips_backup_files() {
$backup_dir = __DIR__ . '/backups';
if (!file_exists($backup_dir)) {
mkdir($backup_dir, 0755, true);
}
$date = date('Y-m-d_H-i-s');
$archive_file = "$backup_dir/wp-content_backup_$date.tar.gz";
$source_dir = __DIR__ . '/wp-content';
$command = "tar -czf $archive_file -C $source_dir .";
exec($command, $output, $return_var);
if ($return_var !== 0) {
error_log("[wptips_backup_files] Ошибка создания архива wp-content");
return false;
}
return $archive_file;
}Важно, чтобы у PHP было право выполнять команды и читать нужные файлы.
Объединяем резервное копирование базы и файлов
Теперь создадим функцию, которая запустит обе операции и соберет результаты:
function wptips_create_full_backup() {
$db_backup = wptips_backup_database();
$files_backup = wptips_backup_files();
if ($db_backup && $files_backup) {
return [
'database' => $db_backup,
'files' => $files_backup
];
}
return false;
}Этот код можно запускать вручную, либо настроить для него выполнение по расписанию.
Настройка автоматического запуска с помощью cron
Чтобы автоматизировать создание бэкапов, используем системный планировщик задач cron. Пример записи в crontab для запуска скрипта каждую ночь в 3 часа:
0 3 * * * /usr/bin/php /путь/к/вашему/сайту/backup.phpГде backup.php — файл, в котором вызывается функция создания бэкапа, например:
<?php
require_once 'wp-load.php';
$result = wptips_create_full_backup();
if ($result) {
echo "Резервная копия успешно создана:\n";
echo "База данных: " . $result['database'] . "\n";
echo "Файлы: " . $result['files'] . "\n";
} else {
echo "Ошибка при создании резервной копии";
}
?>Важно удостовериться, что PHP из командной строки использует тот же пользователь и окружение, что и веб-сервер, чтобы были доступны все нужные пути и права.
Дополнительные советы и рекомендации
Хранение и безопасность бэкапов
Не храните резервные копии в публичных папках сайта, чтобы избежать доступа извне. Лучше использовать папку вне веб-директории или настроить защиту через .htaccess. Также можно периодически переносить резервные копии на удаленный сервер или в облако.
Мониторинг и уведомления
Для контроля успешности бэкапов можно добавить отправку уведомлений на email или интеграцию с Telegram с помощью ботов. Это поможет вовремя узнавать об ошибках.
Оптимизация и очистка старых копий
Рекомендуется реализовать механизм удаления старых резервных копий, чтобы не переполнять диск. Например, хранить только последние 7 копий или копии за месяц.
Заключение
Создание автоматических резервных копий WordPress без плагинов — несложная задача, если использовать возможности PHP и системных команд. Такой подход дает полный контроль над процессом и снижает вероятность проблем с совместимостью и нагрузкой. Следуя приведенным примерам, вы сможете настроить надежную систему бэкапов под свои задачи.
Если хотите упростить задачу с дополнительными функциями и удобным интерфейсом, советую обратить внимание на плагин My Popup от WPSHOP, который умеет показывать уведомления об успешных или неуспешных операциях, что пригодится при ручной активации бэкапов.