Підготовка
Перед перенесенням: зробіть повний бекап (БД + файли), зафіксуйте версії PHP/MySQL на старому сервері, встановіть аналогічні на новому.
Крок 1: Експорт бази даних
# На старому сервері
mysqldump -u wpuser -p wppassword wordpress_db > /tmp/wp_export.sql
# Передаємо на новий сервер
scp /tmp/wp_export.sql root@NEW_SERVER_IP:/tmp/
Крок 2: Перенесення файлів через rsync
rsync -avz --progress /var/www/wordpress/ root@NEW_SERVER_IP:/var/www/wordpress/
Крок 3: Створення БД та імпорт
# На новому сервері
mysql -u root -p -e "CREATE DATABASE wordpress_db CHARACTER SET utf8mb4;"
mysql -u root -p -e "CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'strong_password';"
mysql -u root -p -e "GRANT ALL ON wordpress_db.* TO 'wpuser'@'localhost';"
mysql -u root -p wordpress_db < /tmp/wp_export.sql
Крок 4: Налаштування wp-config.php
define('DB_HOST', 'localhost');
define('DB_NAME', 'wordpress_db');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'strong_password');
Крок 5: Налаштування Nginx
server {
listen 80;
server_name example.com www.example.com;
root /var/www/wordpress;
index index.php;
location / { try_files $uri $uri/ /index.php?$args; }
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Типові помилки під час перенесення
| Помилка | Причина | Що робити |
|---|---|---|
| Error establishing a database connection | У wp-config.php на новому сервері залишились старі DB_HOST, DB_USER або DB_PASSWORD | Звірте всі чотири константи DB_* з реальними даними нової бази |
| mysqldump: Got error: 1045: Access denied for user | Користувача бази даних не створено на новому сервері або вказано невірний пароль | Створіть користувача заново командою CREATE USER і видайте GRANT ще раз |
| 413 Request Entity Too Large під час імпорту через phpMyAdmin | Розмір SQL-дампу перевищує upload_max_filesize або client_max_body_size | Імпортуйте через консоль: mysql -u root -p wordpress_db < wp_export.sql |
| This site can't provide a secure connection після перемикання DNS | На новому сервері ще не випущено SSL-сертифікат для домену | Випустіть сертифікат Let's Encrypt (certbot) до перемикання DNS або одразу після нього |
| 404 Not Found на всіх сторінках, крім головної | На новому сервері не налаштовано try_files в Nginx, або не перечитано правила постійних посилань | Перевірте конфіг Nginx і оновіть permalinks: Налаштування → Постійні посилання → Зберегти зміни |
Порівняння способів перенесення
| Спосіб | Контроль над процесом | Обмеження розміру | Підходить для |
|---|---|---|---|
| mysqldump + rsync (цей метод) | Повний | Немає | Великих сайтів і нестандартних налаштувань сервера |
| Duplicator / All-in-One WP Migration | Середній | До 500 МБ–2 ГБ на безкоштовній версії | Невеликих сайтів, перенесення без доступу по SSH |
| Перенесення інструментом хостинг-панелі | Низький | Залежить від панелі | Переходу між тарифами одного провайдера |
Коли цей спосіб не підходить
- На старому сервері немає доступу по SSH (звичайний shared-хостинг) — тоді використовуйте експорт через панель або плагін перенесення
- Сайт — частина WordPress Multisite зі спільними таблицями для десятків піддоменів — перенесення потребує окремої процедури мапінгу доменів
- На старій IP-адресі працює поштовий сервер або інші сервіси, прив'язані до конкретної адреси, — їх потрібно переносити окремо і заздалегідь
- Бізнесу потрібне перенесення без жодної секунди простою — тоді потрібна схема blue-green з балансувальником, а не пряме перемикання DNS
Детальний розбір інструментів передавання файлів — у статті «Перенесення файлів сайту: rsync, SCP і FTP — що обрати», а прапори mysqldump розібрані у статті «mysqldump: резервне копіювання та відновлення MySQL».
Перевірка результату
Після перенесення переконайтеся, що сайт коректно працює на новому сервері:
# Цілісність core-файлів WordPress
wp core verify-checksums
# Кількість таблиць у новій базі має збігатися зі старою
mysql -u wpuser -p -e "SHOW TABLES FROM wordpress_db;" | wc -l
# Головна сторінка відповідає 200
curl -s -o /dev/null -w "%{http_code}\n" -H "Host: example.com" http://NEW_SERVER_IP/
# Перевірка постійних посилань (permalinks) на 404
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/2026/01/test-post/
Якщо сайт встановлювався з нуля, корисно звіритися з інструкцією «Встановлення WordPress на VPS без хостингу з нуля» — там описано базові вимоги до середовища PHP і Nginx.
Перенесення вручну дає повний контроль над кожним кроком, але вимагає акуратності: не поспішайте на етапі перевірки перед перемиканням DNS, інакше виправляти помилки доведеться вже на живому трафіку.