Автоматическое создание копий (бэкапов) WordPress без использования плагинов

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

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

Плагины для бэкапа удобны, но имеют свои недостатки. Они могут потреблять много ресурсов, конфликтовать с другими плагинами или обновлениями, а также добавлять лишние процессы на сервер. Кроме того, в некоторых случаях доступ к админке ограничен, и нужно настроить резервное копирование на уровне сервера.

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

Основная задача — сохранить базу данных и файлы сайта (тему, плагины, загрузки), чтобы в случае сбоя вы могли быстро восстановить работоспособность.

Основные компоненты бэкапа WordPress

Для успешного восстановления сайта нужны две части:

  • База данных MySQL — содержит все записи, настройки, контент и пользователей.
  • Файлы сайта — темы, плагины, загруженные медиафайлы, конфигурация (.htaccess, wp-config.php и др.).

Пренебрегать любой из этих частей нельзя.

Автоматизация бэкапов с помощью cron и bash-скрипта

Для автоматического резервного копирования используем планировщик задач cron и bash-скрипт, который будет создавать архив базы данных и файлов сайта.

Создание bash-скрипта для резервного копирования

Ниже пример скрипта wpplugin_backup.sh, который можно разместить в домашней директории сервера.

#!/bin/bash

# Конфигурация — замените на свои данные
DB_NAME="wp_database"
DB_USER="wp_user"
DB_PASSWORD="wp_password"
DB_HOST="localhost"

# Путь к корню WordPress
WP_PATH="/var/www/html"

# Каталог для хранения бэкапов
BACKUP_DIR="/var/backups/wpplugin"

# Создаем папку, если не существует
mkdir -p "$BACKUP_DIR"

# Формат даты для имени файла
DATE=$(date +"%Y-%m-%d_%H-%M-%S")

# Файл дампа базы данных
DB_BACKUP_FILE="$BACKUP_DIR/db_backup_$DATE.sql"

# Файл архива файлов сайта
FILES_BACKUP_FILE="$BACKUP_DIR/files_backup_$DATE.tar.gz"

# Создаем дамп базы данных
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASSWORD $DB_NAME > $DB_BACKUP_FILE

if [ $? -ne 0 ]; then
    echo "Ошибка при создании дампа базы данных"
    exit 1
fi

# Архивируем файлы сайта
# Исключаем папку бэкапов, чтобы не архивировать сами резервные копии

tar --exclude="$BACKUP_DIR" -czf $FILES_BACKUP_FILE -C $WP_PATH .

if [ $? -ne 0 ]; then
    echo "Ошибка при архивировании файлов сайта"
    exit 1
fi

# Очистка старых бэкапов старше 14 дней
find $BACKUP_DIR -type f -mtime +14 -exec rm {} \;

echo "Резервное копирование выполнено успешно: $DATE"

Этот скрипт:

  • Создает дамп MySQL базы
  • Архивирует файлы сайта, исключая папку с бэкапами
  • Удаляет резервные копии старше двух недель

Настройка cron для автоматического запуска скрипта

Чтобы автоматизировать процесс, добавим задачу в cron. Для этого выполните команду:

crontab -e

И добавьте строку, например, для ежедневного запуска в 3 часа ночи:

0 3 * * * /bin/bash /home/youruser/wpplugin_backup.sh >> /home/youruser/wpplugin_backup.log 2>&1

Замените /home/youruser/wpplugin_backup.sh на путь к вашему скрипту.

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

Отправка бэкапов на удаленный сервер или облако

Чтобы обезопасить резервные копии от потери с основного сервера, имеет смысл отправлять их на удаленный сервер или облачное хранилище.

Например, можно использовать rsync для копирования на удаленный сервер:

rsync -avz $BACKUP_DIR/ user@remote-server:/path/to/backup/folder/

Или интегрировать загрузку в облако через консольные клиенты — AWS CLI для Amazon S3, rclone для Google Drive и др.

Пример PHP функции для создания резервной копии базы данных

Если хочется встроить базовое резервное копирование в плагин или тему, можно использовать PHP для экспорта базы в SQL файл.

function wpplugin_create_db_backup() {
    global $wpdb;

    $tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
    $sql_dump = "";

    foreach ($tables as $table) {
        $table_name = $table[0];
        $create_table = $wpdb->get_row("SHOW CREATE TABLE $table_name", ARRAY_N);

        $sql_dump .= "\nDROP TABLE IF EXISTS `$table_name`;\n";
        $sql_dump .= $create_table[1] . ";\n\n";

        $rows = $wpdb->get_results("SELECT * FROM $table_name", ARRAY_A);

        foreach ($rows as $row) {
            $values = array_map(array($wpdb, 'escape'), array_values($row));
            $values = array_map(function($v) { return "'" . addslashes($v) . "'"; }, $values);

            $sql_dump .= "INSERT INTO `$table_name` VALUES (" . implode(",", $values) . ");\n";
        }
    }

    $backup_file = WP_CONTENT_DIR . '/backups/db_backup_' . date('Y-m-d_H-i-s') . '.sql';
    file_put_contents($backup_file, $sql_dump);
    return $backup_file;
}

Эта функция обходит все таблицы, получает структуру и данные, сохраняет все в SQL файл. Такой файл можно использовать для восстановления базы.

Рекомендации по безопасности бэкапов

  • Храните бэкапы вне публичной директории сайта, чтобы они не были доступны по URL.
  • Ограничьте права доступа к папкам с резервными копиями.
  • Используйте шифрование при передаче бэкапов на удалённые хранилища.
  • Регулярно проверяйте возможность восстановления из резервных копий.

Заключение

Настройка автоматического резервного копирования без плагинов — задача вполне решаемая и даже предпочтительная в ряде случаев. Использование серверных скриптов и cron позволяет добиться надежности и гибкости без дополнительной нагрузки на WordPress.

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

Создание собственного REST API эндпоинта в WordPress
27.11.2025
Как добавить AJAX в WordPress плагин: подробное руководство
20.11.2025
Как автоматизировать удаление старого кеша в WordPress
29.01.2026
Автоматическое создание копий (бэкапов) WordPress без использования плагинов
08.03.2026
Оптимизация загрузки изображений в WordPress с помощью WP Rocket
12.01.2026