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

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

Почему стоит отказаться от плагинов резервного копирования

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

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

Настройка автоматического резервного копирования базы данных WordPress

Первая важная часть бэкапа — это база данных. Для ее сохранения используем команду mysqldump. Предлагаю создать bash-скрипт wpreg_backup_db.sh со следующим содержимым:

#!/bin/bash

# Переменные подключения к базе
DB_NAME="ваше_имя_бд"
DB_USER="ваш_пользователь"
DB_PASS="ваш_пароль"
DB_HOST="localhost"

# Папка для сохранения бэкапов
BACKUP_DIR="/путь/к/папке/backup"

# Имя файла с датой
DATE=$(date +"%Y-%m-%d_%H-%M-%S")

# Создаем резервную копию базы
mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db_backup_$DATE.sql

# Опционально: удаляем бэкапы старше 7 дней
find $BACKUP_DIR -name "db_backup_*.sql" -type f -mtime +7 -exec rm {} \;

После создания скрипта не забудьте выдать ему права на исполнение: chmod +x wpreg_backup_db.sh.

Резервное копирование файлов WordPress

Кроме базы данных, важна и файловая часть: темы, плагины, загрузки и сам WordPress. Для этого можно использовать команду tar:

#!/bin/bash

# Путь к корню WordPress
WP_ROOT="/путь/к/wordpress"

# Папка для бэкапов
BACKUP_DIR="/путь/к/папке/backup"

# Имя архива
DATE=$(date +"%Y-%m-%d_%H-%M-%S")

# Создаем архив
 tar -czf $BACKUP_DIR/wp_files_backup_$DATE.tar.gz -C $WP_ROOT .

# Удаляем архивы старше 7 дней
find $BACKUP_DIR -name "wp_files_backup_*.tar.gz" -type f -mtime +7 -exec rm {} \;

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

Интеграция с WP-Cron для запуска резервного копирования

Чтобы запускать скрипты автоматически, можно использовать WP-Cron — внутренний планировщик WordPress. Для этого добавим кастомный хук и функцию в functions.php вашей темы или в отдельном плагине:

function wpreg_schedule_backup() {
    if ( ! wp_next_scheduled( 'wpreg_backup_event' ) ) {
        wp_schedule_event( time(), 'daily', 'wpreg_backup_event' );
    }
}
add_action( 'wp', 'wpreg_schedule_backup' );

add_action( 'wpreg_backup_event', 'wpreg_run_backup_scripts' );

function wpreg_run_backup_scripts() {
    $backup_db = '/путь/к/wpreg_backup_db.sh';
    $backup_files = '/путь/к/wpreg_backup_files.sh';

    if ( file_exists( $backup_db ) ) {
        exec( $backup_db );
    }
    if ( file_exists( $backup_files ) ) {
        exec( $backup_files );
    }
}

Этот код проверяет, запланировано ли событие резервного копирования, и если нет — добавляет его с интервалом в один день. При срабатывании запускаются скрипты бэкапа.

Настройка интервалов WP-Cron

По умолчанию WP-Cron запускается при посещении сайта, что может быть не очень надежно. Для точного расписания лучше отключить WP-Cron и настроить системный cron на сервере:

# В wp-config.php добавьте
define('DISABLE_WP_CRON', true);

# В crontab добавьте строку
*/30 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Это позволит запускать WP-Cron каждые 30 минут, гарантируя регулярное выполнение задач.

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

Созданные файлы резервных копий лучше хранить вне сервера сайта. Для автоматической отправки можно использовать rsync или инструменты для работы с облачными хранилищами.

Пример отправки архива на FTP-сервер:

#!/bin/bash

FTP_HOST="ftp.example.com"
FTP_USER="ftpuser"
FTP_PASS="ftppassword"
BACKUP_DIR="/путь/к/папке/backup"

# Отправляем все новые бэкапы
for file in $BACKUP_DIR/*; do
  curl -T "$file" ftp://$FTP_USER:$FTP_PASS@$FTP_HOST/remote_backup_folder/
  if [ $? -eq 0 ]; then
    echo "Uploaded $file successfully"
  else
    echo "Failed to upload $file"
  fi
done

Этот код можно добавить в отдельный скрипт и запускать после создания резервной копии.

Советы по безопасности и производительности

1. Не храните пароли в скриптах в открытом виде на общедоступных серверах. Используйте защищенные файлы конфигурации или переменные окружения.

2. Ограничьте права доступа к скриптам так, чтобы их могли запускать только нужные пользователи.

3. Настройте уведомления по email при успешном или неудачном создании бэкапа — это можно сделать внутри bash-скриптов через команду mail или отправку сообщения в WordPress.

4. Если ваш хостинг поддерживает, используйте инкрементные бэкапы — они занимают меньше места и работают быстрее.

Альтернативные решения и плагины для резервного копирования

Если в будущем понадобится более простой вариант, обратите внимание на плагины с хорошей репутацией и оптимизацией, например, Clearfy Pro. Он также умеет управлять задачами WP-Cron и оптимизировать работу сайта.

Для визуального контроля процесса можно использовать WP-Cron Manager. Он поможет следить за запланированными событиями и отлаживать задачи.

Итог

Автоматизация резервного копирования WordPress без плагинов — реальная и полезная задача, которая позволит вам контролировать процесс и снизить нагрузку на сайт. Используйте приведенные скрипты, интегрируйте их с WP-Cron и не забывайте о безопасности и регулярном тестировании восстановления данных.

Как массово удалить неиспользуемые медиа файлы в WordPress
09.12.2025
Как использовать WooCommerce REST API для управления товарами в WordPress
14.02.2026
Как удалить зависшие AJAX-запросы в WordPress
15.04.2026
Как удалить зависшие transienty в WordPress для ускорения сайта
25.03.2026
Создаем настройку для автоматического удаления спама в комментариях WordPress
30.12.2025