Миграция сайта WordPress на новый хостинг
Перенос WordPress — задача с несколькими подводными камнями: абсолютные пути в БД, сериализованные данные, разные версии PHP и MySQL, SSL-сертификаты. Правильный порядок действий минимизирует downtime до нуля.
Инструменты
WP-CLI + rsync — профессиональный подход для VPS. Полный контроль процесса, минимальное downtime.
Плагин All-in-One WP Migration — удобен для shared-хостинга, ограничение по размеру файла в бесплатной версии (512 MB).
Duplicator — создаёт installer-пакет, устанавливается как обычный сайт.
Миграция через WP-CLI (рекомендуется)
1. Экспорт с источника:
# Файлы
rsync -avz --exclude='.git' --exclude='node_modules' \
/var/www/old-host.com/ user@new-server:/var/www/new-host.com/
# БД
wp db export --add-drop-table - | gzip > /tmp/wordpress-db.sql.gz
scp /tmp/wordpress-db.sql.gz user@new-server:/tmp/
2. На новом сервере — настройка окружения:
# Создать БД
mysql -u root -e "
CREATE DATABASE wordpress_new CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'new-password';
GRANT ALL PRIVILEGES ON wordpress_new.* TO 'wp_user'@'localhost';"
# Импорт БД
gunzip -c /tmp/wordpress-db.sql.gz | mysql -u root wordpress_new
3. Обновить wp-config.php:
define('DB_NAME', 'wordpress_new');
define('DB_USER', 'wp_user');
define('DB_PASSWORD', 'new-password');
define('DB_HOST', 'localhost');
4. Замена URL в БД:
# ОБЯЗАТЕЛЬНО перед заменой URL
wp search-replace 'http://old-host.com' 'https://new-host.com' \
--all-tables \
--report-changed-only
# Для staging (не менять URL сразу)
wp search-replace 'old-host.com' 'new-host.com' \
--all-tables \
--skip-columns=guid
wp search-replace корректно обрабатывает сериализованные данные — в отличие от ручного SQL UPDATE.
5. Тестирование на новом сервере (до смены DNS):
# Добавить в /etc/hosts на своём компьютере
1.2.3.4 new-host.com www.new-host.com
Проверить: главная страница, товары/посты, формы, оплата, авторизация, изображения.
6. Смена DNS:
Снизить TTL записи A до 300 секунд за 24 часа до миграции. После переключения — ждать распространения (до 48 часов, обычно 1–4 часа).
Сериализованные данные
Проблема ручной замены URL в БД: значения вроде a:2:{s:3:"url";s:22:"http://old-host.com/";} содержат длину строки. При замене длина изменяется, сериализация ломается.
wp search-replace решает это автоматически. Если используете другой инструмент — sed или phpMyAdmin — данные могут быть повреждены.
Разные версии PHP
Если старый хостинг — PHP 7.4, новый — PHP 8.2: проверить совместимость всех плагинов и тем. Большинство современных плагинов поддерживают PHP 8.x, но некоторые старые — нет.
# Проверка ошибок PHP после миграции
tail -f /var/log/php/error.log
SSL на новом сервере
certbot --nginx -d new-host.com -d www.new-host.com
После выдачи сертификата — убедиться что FORCE_SSL_ADMIN в wp-config.php установлен.
Сроки
Миграция WordPress-сайта до 5 GB с тестированием и переключением DNS — 3–5 часов. Крупный сайт с дополнительными интеграциями — 6–8 часов.







