Как создать автоматические резервные копии WordPress без плагинов

Резервное копирование сайта — одна из важнейших задач для любого администратора WordPress. Большинство пользователей для этих целей устанавливают плагины, однако иногда хочется обойтись без них, чтобы не нагружать сайт и не зависеть от стороннего кода. В этой статье мы подробно рассмотрим, как настроить автоматическое резервное копирование WordPress без использования плагинов, используя только возможности сервера и минимальные скрипты на PHP.

Почему стоит делать резервные копии WordPress без плагинов

Плагины резервного копирования удобны, но могут иметь ряд недостатков:

  • Дополнительная нагрузка на сайт и базу данных.
  • Риск конфликтов с другими плагинами.
  • Зависимость от обновлений и поддержки разработчиков.
  • Ограничения бесплатных версий по функционалу и объему копий.

Создавая собственное решение, вы получаете полный контроль над процессом и можете оптимизировать его под свои нужды.

Что нужно резервировать в WordPress

Для полноценного восстановления сайта необходимо сохранять две основные части:

  1. Файлы сайта: папка с темой, плагинами, медиафайлами, а также файлы ядра WordPress.
  2. База данных: все записи, настройки, публикации и пользователи хранятся в базе данных 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 с расширенными возможностями автоматизации и безопасности.

Как использовать хуки в WordPress: практические примеры и советы
10.11.2025
Как отключить автоматическое удаление старых заказов в WooCommerce
21.05.2026
Как автоматизировать управление меню в WordPress с помощью кода
31.01.2026
Как автоматизировать удалённую оптимизацию базы данных WordPress
13.04.2026
Использование хука woocommerce_checkout_update_order_meta для добавления данных к заказу в WooCommerce
21.05.2026