Start typing to search across invoices, services, domains, tickets, and more...
При смене дата-центра, апгрейде конфигурации или переезде от другого провайдера больше всего беспокоят потеря данных и долгий простой. В этом руководстве описан проверенный на практике порядок миграции: инкрементальная синхронизация файлов с rsync, перенос базы данных с mysqldump и заблаговременное снижение TTL в DNS для плавного переключения. Для большинства сайтов это позволяет сократить простой до нескольких минут.
--single-transaction в mysqldump позволяет выгрузить согласованный снимок без блокировки таблиц.rsyncУстановка rsync:
# Debian / Ubuntu
apt install -y rsync
# RHEL / Rocky / AlmaLinux
dnf install -y rsync
| Пункт | Подробности |
|---|---|
| Полный бэкап | Перед миграцией сделайте полный бэкап или снапшот исходного сервера |
| Место на диске | С помощью df -h и du -sh убедитесь, что на целевом диске достаточно места |
| Версии ПО | Сравните версии PHP, MySQL и Nginx, чтобы избежать несовместимости с более новыми версиями |
| Конфигурационные файлы | Запишите настройки виртуальных хостов, задания cron (crontab -l) и расположение SSL-сертификатов |
| Жёстко прописанные IP | Проверьте, не прописан ли IP старого сервера в приложении или конфигах |
| Почта и сторонние сервисы | Убедитесь, что MX-записи, белые списки API, URL колбэков платёжных систем и т. п. не завязаны на старый IP |
| TTL DNS | Снизьте TTL как минимум за 24 часа |
Зайдите в панель управления DNS вашего домена и измените TTL A-записей сайта со значения по умолчанию (обычно 3600 секунд и больше) на 300 секунд или даже 60. Перед фактическим переключением подождите как минимум один исходный период TTL, чтобы кэши рекурсивных DNS-серверов везде истекли. Текущий TTL можно проверить командой:
dig example.com A +noall +answer
Число после имени домена в выводе — оставшийся TTL в секундах.
На целевом сервере сгенерируйте ключ и добавьте его на исходный сервер (мы используем схему «pull», чтобы работать с новой машины):
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
ssh-copy-id -p 22 root@SOURCE_SERVER_IP
Замените
SOURCE_SERVER_IPв командах на IP-адрес исходного сервера.
Запустите на целевом сервере (пример синхронизации каталога сайта):
rsync -avzP -e "ssh -p 22" root@SOURCE_SERVER_IP:/var/www/ /var/www/
Параметры: -a — режим архива с сохранением прав, владельцев и временных меток; -v — подробный вывод; -z — сжатие при передаче; -P — отображение прогресса и докачка прерванных передач. Обратите внимание: завершающий / в исходном пути означает «синхронизировать содержимое каталога»; без него появится лишний уровень вложенности.
Перед реальным запуском добавьте -n (--dry-run), чтобы посмотреть, какие файлы будут переданы. Чтобы пропустить каталоги кэша или логов, используйте --exclude:
rsync -avzPn --exclude 'cache/' --exclude '*.log' -e "ssh -p 22" root@SOURCE_SERVER_IP:/var/www/ /var/www/
Первую полную синхронизацию можно запускать, пока сайт работает, — на бизнес это не повлияет.
Выгрузите базу данных на исходном сервере. Для таблиц InnoDB параметр --single-transaction создаёт согласованный снимок без блокировки таблиц:
mysqldump -u root -p --single-transaction --routines --triggers --events --default-character-set=utf8mb4 dbname | gzip > /root/dbname.sql.gz
Передайте дамп на целевой сервер:
rsync -avP -e "ssh -p 22" root@SOURCE_SERVER_IP:/root/dbname.sql.gz /root/
На целевом сервере создайте базу данных и пользователя, затем выполните импорт:
mysql -u root -p -e "CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p -e "CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; GRANT ALL PRIVILEGES ON dbname.* TO 'dbuser'@'localhost'; FLUSH PRIVILEGES;"
gunzip < /root/dbname.sql.gz | mysql -u root -p dbname
Замените
STRONG_PASSWORDна собственный надёжный пароль.
После импорта выборочно проверьте, совпадает ли количество таблиц:
mysql -u root -p -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='dbname';"
Не меняя DNS, временно направьте домен на новый IP через файл hosts на своём компьютере (в Windows это C:\Windows\System32\drivers\etc\hosts, в macOS/Linux — /etc/hosts):
203.0.113.20 example.com www.example.com
По очереди проверьте ключевые функции: главную страницу, вход, загрузку файлов, колбэки платёжных систем. Когда всё работает, удалите запись из hosts.
--delete (он удаляет лишние файлы на целевой стороне, поэтому используйте его осторожно).Рекомендуем сохранять исходный сервер как минимум 3–7 дней, прежде чем отказываться от него, чтобы при необходимости можно было откатиться.
Просто запустите ту же команду ещё раз. rsync пропустит уже переданные файлы, а параметр -P позволяет докачивать большие файлы.
Добавьте --quick, чтобы снизить потребление памяти, и используйте сжатие через конвейер, чтобы выгружать и передавать одновременно. Для баз размером в десятки гигабайт и больше рассмотрите инструменты физического резервного копирования (например, Percona XtraBackup или mariabackup) или перенос через репликацию primary/replica.
Обычно это вызвано несовпадением кодировки при выгрузке и импорте. Убедитесь, что при выгрузке указан --default-character-set=utf8mb4, а целевая база данных тоже использует utf8mb4.
Так бывает, потому что DNS-кэши у некоторых провайдеров ещё не истекли; обычно это проходит само в пределах исходного TTL. Именно поэтому старый сервер стоит сохранить на несколько дней.
Ключ к плавной миграции: «заранее снизить TTL, сначала полная синхронизация, затем инкрементальная, и переключаться только после тестирования». Если вы планируете перенести сайт или бизнес в IMIDC, мы предлагаем бесплатную помощь с миграцией: после заказа облачного или выделенного сервера в Гонконге, Японии, Сингапуре, США или другой локации создайте тикет с описанием исходного окружения и требований к переносу, и наши специалисты согласуют с вами конкретный план и временное окно. Если во время миграции возникнут вопросы, вы в любой момент можете получить поддержку через систему тикетов, работающую 24/7.