Подготовка
Перед переносом: сделайте полный бэкап (БД + файлы), зафиксируйте версии 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, иначе исправлять ошибки придётся уже на живом трафике.