К основному содержимому

Перенос WordPress на VDS: пошаговое руководство

WordPress · 29.01.2025 · 4 мин чтения
Иллюстрация к статье «Перенос WordPress на VDS: пошаговое руководство»

Подготовка

Перед переносом: сделайте полный бэкап (БД + файлы), зафиксируйте версии 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;
    }
}
⚠️ Не переключайте DNS до полной проверки сайта на новом IP. Используйте /etc/hosts для локального тестирования.

Типичные ошибки при переносе

ОшибкаПричинаЧто делать
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, иначе исправлять ошибки придётся уже на живом трафике.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке