WordPress Multisite — это мощная функция, позволяющая создавать сеть сайтов на одной установке WordPress. Однако резервное копирование такой сети требует особого подхода, чтобы обеспечить безопасность и целостность всех сайтов. В этой статье рассмотрим, как правильно организовать резервное копирование Multisite с помощью плагинов и собственного кода, а также разберём распространённые ошибки и методы их исправления.
Особенности резервного копирования WordPress Multisite
В отличие от обычного WordPress, где база данных и файлы принадлежат одному сайту, в Multisite одна база данных содержит таблицы для всех сайтов сети, а также общие файлы и файлы каждого отдельного сайта. Это накладывает следующие требования на резервное копирование:
- Нужно сохранять всю базу данных целиком, чтобы не потерять связи между сайтами.
- Файлы wp-content/uploads разделены по папкам для каждого сайта (например, sites/2/files), нужно их резервировать аккуратно.
- Резервные копии должны поддерживать возможность восстановления как всей сети, так и отдельных сайтов.
Если вы используете WP Backup, обязательно убедитесь, что плагин корректно работает с мультисайтовой структурой, иначе рискуете получить неполные или повреждённые бэкапы.
Выбор плагина для резервного копирования Multisite
Многие популярные плагины поддерживают Multisite, однако не все работают одинаково. Рассмотрим три проверенных решения с поддержкой Multisite:
1. UpdraftPlus
Один из самых популярных плагинов. Поддерживает Multisite начиная с версии Premium. Позволяет делать резервные копии всей сети или отдельных сайтов. Позволяет сохранять бэкапы в облаках (Google Drive, Dropbox и др.)
Для настройки Multisite-резервного копирования в UpdraftPlus:
- Установите и активируйте плагин на Network Admin.
- Перейдите в настройки и выберите режим резервного копирования — «Сеть» или «Отдельный сайт».
- Настройте расписание и место хранения.
Подробнее на официальном сайте: UpdraftPlus с поддержкой Multisite.
2. BlogVault
Платное решение с поддержкой Multisite. Позволяет выполнять инкрементальные резервные копии и обеспечивает возможность точечного восстановления отдельных сайтов.
3. WPvivid Backup
Бесплатный и удобный плагин, который корректно работает с Multisite. Позволяет сохранять полные бэкапы и восстанавливать сеть целиком.
Пример кода: автоматизация резервного копирования Multisite с помощью WP-Cron
Если вы хотите настроить автоматическое резервное копирование Multisite без плагинов, можно использовать WP-CLI и WP-Cron. Вот пример функции, которая запускает резервное копирование базы данных и файлов всей сети:
function wpbackup_ru_multisite_backup() {
if (!is_multisite()) return;
$sites = get_sites();
foreach ($sites as $site) {
switch_to_blog($site->blog_id);
// Сохраняем базу данных сайта
$db_file = WP_CONTENT_DIR . "/backups/site_{$site->blog_id}_" . date('Ymd_His') . ".sql";
$command = "mysqldump --user=DB_USER --password=DB_PASSWORD --host=DB_HOST DB_NAME > $db_file";
shell_exec($command);
// Копируем папку uploads
$uploads_dir = wp_upload_dir();
$backup_dir = WP_CONTENT_DIR . "/backups/uploads/site_{$site->blog_id}_" . date('Ymd_His');
mkdir($backup_dir, 0755, true);
shell_exec("cp -r " . escapeshellarg($uploads_dir['basedir']) . " " . escapeshellarg($backup_dir));
restore_current_blog();
}
}
add_action('wpbackup_ru_cron_multisite_backup', 'wpbackup_ru_multisite_backup');
// Запускаем раз в сутки
if (!wp_next_scheduled('wpbackup_ru_cron_multisite_backup')) {
wp_schedule_event(time(), 'daily', 'wpbackup_ru_cron_multisite_backup');
}Этот код создаёт SQL дампы и копирует папки uploads для каждого сайта в отдельную папку. Для работы нужно заменить DB_USER, DB_PASSWORD, DB_HOST и DB_NAME на реальные данные вашей базы.
Как восстановить отдельный сайт из резервной копии Multisite
Восстановление в Multisite сложнее, чем в односайтовом WordPress, потому что таблицы базы данных объединены. Чтобы восстановить один сайт:
- Восстановите базу данных целиком или только таблицы, связанные с нужным сайтом (обычно они имеют суффикс с ID сайта, например, wp_3_posts, wp_3_options).
- Восстановите файлы uploads для этого сайта (обычно в wp-content/uploads/sites/ID).
- Проверьте, что в таблице wp_blogs есть запись об этом сайте.
Если нужно восстановить только один сайт, примените запросы с фильтрами и используйте инструменты для выборочного импорта, например, WP-CLI с параметром --url.
Распространённые ошибки и их решения
Неполные копии файлов uploads
Иногда резервное копирование не включает все папки uploads для сайтов Multisite, особенно если используются нестандартные пути. Проверяйте путь через функцию wp_upload_dir() для каждого сайта перед копированием.
Повреждение базы данных при восстановлении
Проблемы возникают, если восстанавливается не вся база, а только часть таблиц, или если ID сайтов в базе не совпадают с файлами. Рекомендуется делать полное резервное копирование всей базы и внимательно восстанавливать структуру.
Отсутствие автоматизации или планировщика
Без настроенного WP-Cron или внешнего cron-задачи резервное копирование может не запускаться. Рекомендуется проверять расписание задач и журнал ошибок.
Заключительные рекомендации по безопасности Multisite Backup
Для безопасного резервного копирования Multisite:
- Используйте проверенные плагины с поддержкой Multisite.
- Храните бэкапы в защищённых местах с ограниченным доступом.
- Настраивайте автоматическое удаление старых копий, чтобы не перегружать сервер.
- Периодически тестируйте восстановление, чтобы убедиться в работоспособности бэкапов.
Для удобной работы с резервными копиями рекомендуем обратить внимание на сервисы и инструменты на wpshop.ru, где представлены решения для автоматизации и мониторинга резервного копирования WordPress.