Регулярное создание резервных копий сайта — ключевой элемент безопасности и стабильности любого проекта на 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, которые предлагают удобный интерфейс и расширенные возможности.