Міграція сайту 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 годин.







