Резервное копирование сайта — одна из важнейших задач для любого администратора WordPress. Большинство пользователей для этих целей устанавливают плагины, однако иногда хочется обойтись без них, чтобы не нагружать сайт и не зависеть от стороннего кода. В этой статье мы подробно рассмотрим, как настроить автоматическое резервное копирование WordPress без использования плагинов, используя только возможности сервера и минимальные скрипты на PHP.
Почему стоит делать резервные копии WordPress без плагинов
Плагины резервного копирования удобны, но могут иметь ряд недостатков:
- Дополнительная нагрузка на сайт и базу данных.
- Риск конфликтов с другими плагинами.
- Зависимость от обновлений и поддержки разработчиков.
- Ограничения бесплатных версий по функционалу и объему копий.
Создавая собственное решение, вы получаете полный контроль над процессом и можете оптимизировать его под свои нужды.
Что нужно резервировать в WordPress
Для полноценного восстановления сайта необходимо сохранять две основные части:
- Файлы сайта: папка с темой, плагинами, медиафайлами, а также файлы ядра WordPress.
- База данных: все записи, настройки, публикации и пользователи хранятся в базе данных MySQL или MariaDB.
Резервная копия без базы данных или без файлов будет неполной.
Настройка автоматического резервного копирования базы данных
Для экспорта базы данных можно использовать встроенную утилиту mysqldump. Чтобы настроить автоматическое создание дампа, можно прописать cron-задачу на сервере. Ниже пример bash-скрипта wpto_backup_db.sh:
# /bin/bash
# Параметры подключения к базе
DB_NAME="wordpress"
DB_USER="wpuser"
DB_PASS="wppassword"
DB_HOST="localhost"
# Папка для сохранения копий
BACKUP_DIR="/home/username/backups/db"
mkdir -p "$BACKUP_DIR"
# Имя файла с датой
FILENAME="db_backup_$(date +'%Y-%m-%d_%H-%M-%S').sql"
# Создаем дамп базы
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/$FILENAME"
# Опционально: удаляем старые копии старше 7 дней
find "$BACKUP_DIR" -type f -mtime +7 -name '*.sql' -delete
Далее добавьте cron-задачу для запуска скрипта, например, каждый день в 3 часа ночи:
0 3 * * * /bin/bash /home/username/scripts/wpto_backup_db.sh
Так база будет сохраняться автоматически, и старые копии будут удаляться, чтобы не занимать слишком много места.
Резервное копирование файлов WordPress с помощью rsync
Чтобы сохранить файлы сайта, можно использовать rsync — эффективный инструмент для синхронизации и копирования файлов.
Пример скрипта wpto_backup_files.sh:
# /bin/bash
# Исходная папка с сайтом
SRC_DIR="/var/www/html/wordpress"
# Папка для резервных копий
BACKUP_DIR="/home/username/backups/files/$(date +'%Y-%m-%d_%H-%M-%S')"
mkdir -p "$BACKUP_DIR"
# Копируем файлы
rsync -a --delete "$SRC_DIR/" "$BACKUP_DIR/"
# Опционально: удаляем копии старше 7 дней
find /home/username/backups/files -type d -mtime +7 -exec rm -rf {} +
Добавьте такую же cron-задачу, чтобы запускать этот скрипт автоматически.
Создаем PHP-скрипт для резервного копирования базы через WordPress
Если нет доступа к консоли, можно написать PHP-скрипт, который будет создавать дамп базы и сохранять его в папку на сервере. Вставьте следующий код в файл wp-content/plugins/wpto-db-backup.php (плагин без интерфейса):
<?php
/**
* Plugin Name: WPTO DB Backup
* Description: Резервное копирование базы данных WordPress
* Version: 1.0
* Author: wpto.ru
*/
function wpto_backup_db() {
global $wpdb;
$backup_dir = WP_CONTENT_DIR . '/backups-db';
if ( ! file_exists( $backup_dir ) ) {
mkdir( $backup_dir, 0755, true );
}
$filename = 'db_backup_' . date('Y-m-d_H-i-s') . '.sql';
$filepath = $backup_dir . '/' . $filename;
$command = sprintf(
'mysqldump --user=%s --password=%s --host=%s %s > %s',
DB_USER,
DB_PASSWORD,
DB_HOST,
DB_NAME,
escapeshellarg($filepath)
);
exec($command, $output, $return_var);
if ($return_var === 0) {
error_log('WPTO: База данных успешно сохранена: ' . $filename);
} else {
error_log('WPTO: Ошибка при создании резервной копии базы данных.');
}
}
// Хук для запуска через WP-Cron, например, раз в день
add_action('wpto_daily_backup_event', 'wpto_backup_db');
// Регистрируем событие, если еще не зарегистрировано
if ( ! wp_next_scheduled( 'wpto_daily_backup_event' ) ) {
wp_schedule_event( time(), 'daily', 'wpto_daily_backup_event' );
}
?>
Этот простой плагин создаст дамп базы в папке wp-content/backups-db и будет запускаться автоматически по расписанию WP-Cron.
Как дополнительно обезопасить и оптимизировать резервное копирование
При организации резервного копирования важно учитывать ряд моментов:
- Хранение копий: желательно сохранять резервные копии не только на сервере сайта, но и копировать их на удаленный сервер или облако (например, через rsync на другой VPS или использованием scp).
- Шифрование: для безопасности резервные копии базы можно архивировать с паролем или шифровать с помощью GPG.
- Частота копий: настройте расписание в зависимости от частоты обновлений сайта и важности данных.
- Очистка старых копий: автоматическое удаление старых резервных копий позволит не переполнять диск.
- Логи и уведомления: добавьте логирование и отправку уведомлений на email при успешном или неудачном создании копий.
Заключение
Автоматизация резервного копирования без плагинов — это реальная и практичная задача, которую можно решить с помощью стандартных инструментов сервера и минимального кода. Такой подход снижает нагрузку на WordPress и дает полный контроль над процессом. Для пользователей, работающих на VPS или выделенных серверах, это оптимальное решение.
Если вы хотите дополнить функционал и интегрировать резервное копирование с административной панелью, можно использовать плагины из WPShop с расширенными возможностями автоматизации и безопасности.