Перенос сайта и базы данных на новый VPS: rsync и dump
Перенос сайта на новый сервер сводится к трём вещам: скопировать файлы, перенести базу данных и переключить домен. Если сделать всё по порядку и проверить сайт до смены DNS, миграция пройдёт почти без простоя.
План миграции
- Подготовить новый VPS (веб-сервер, PHP, СУБД).
- Скопировать файлы сайта через
rsync. - Перенести базу данных дампом.
- Проверить сайт на новом сервере по IP.
- Переключить DNS и дождаться распространения.
Шаг 1. Подготовка нового сервера
Установите то же окружение, что на старом (например, LEMP), и создайте пустую базу и пользователя. Настройте SSH-доступ между серверами — удобно сгенерировать ключ на старом и добавить в новый:
ssh-keygen -t ed25519
ssh-copy-id user@NEW_SERVER_IP
Шаг 2. Копирование файлов через rsync
rsync переносит только изменённые файлы и сохраняет права. Запустите со старого сервера:
rsync -avz --progress /var/www/example.com/ \
user@NEW_SERVER_IP:/var/www/example.com/
Флаги: -a — сохранить права/владельцев/симлинки, -z — сжатие в канале, -v — подробный вывод. Слэш в конце источника означает «содержимое каталога».
Для большого сайта сделайте предварительную синхронизацию заранее, а финальную — прямо перед переключением, чтобы догнать свежие изменения.
Шаг 3. Перенос базы данных
На старом сервере создайте дамп. Для MySQL/MariaDB:
mysqldump --single-transaction -u root -p app_db | gzip > app_db.sql.gz
Скопируйте дамп на новый сервер:
rsync -avz app_db.sql.gz user@NEW_SERVER_IP:/tmp/
На новом сервере импортируйте:
gunzip < /tmp/app_db.sql.gz | mysql -u root -p app_db
Для PostgreSQL команды аналогичны:
pg_dump -Fc app_db > app_db.dump
# на новом сервере:
pg_restore -d app_db --clean app_db.dump
Шаг 4. Правка конфигурации сайта
Обновите строку подключения к базе в конфиге приложения (например, wp-config.php, .env) — хост, имя базы, пользователь, пароль. Проверьте права на каталоги:
sudo chown -R www-data:www-data /var/www/example.com
Шаг 5. Проверка до переключения DNS
Не меняя DNS, проверьте сайт на новом сервере, подменив домен в файле hosts на своём компьютере:
NEW_SERVER_IP example.com
(В Linux/macOS это /etc/hosts.) Откройте сайт — если всё работает, можно переключать домен. После проверки строку из hosts уберите.
Шаг 6. Переключение DNS
Заранее снизьте TTL A-записи (например, до 300 секунд) за сутки до переезда — тогда переключение распространится быстрее. Смените A-запись на IP нового сервера и следите:
dig +short example.com
Пока DNS обновляется у провайдеров, часть трафика ещё идёт на старый сервер — поэтому его не выключайте минимум сутки.
Чек-лист после переноса
| Проверка | Как |
|---|---|
| Сайт открывается | по домену после смены DNS |
| База подключена | нет ошибок соединения в логах |
| Права файлов | chown www-data, загрузки работают |
| SSL | перевыпустить certbot на новом сервере |
| Cron-задачи | перенести crontab вручную |
Частые вопросы
Как перенести сайт без простоя?
Синхронизируйте файлы и базу заранее, проверьте сайт через hosts, затем сделайте финальную досинхронизацию и переключите DNS. Старый сервер держите включённым сутки.
rsync не сохраняет права — почему?
Запускайте с флагом -a (архивный режим) и от пользователя с достаточными правами; для полного сохранения владельцев может понадобиться sudo и --numeric-ids.
Нужно ли переносить SSL-сертификат? Проще перевыпустить его заново через certbot на новом сервере после переключения DNS — это займёт минуту.
Почему после переноса часть посетителей видит старый сайт? DNS кэшируется у провайдеров согласно TTL. Снизьте TTL заранее и подождите несколько часов после смены записи.
Для нового сервера под ваш проект выбирайте конфигурацию с запасом: смотрите аренда VPS, а для сайтов на CMS — VPS для WordPress.
