Как я переносил сайт с одного хостинга на другой и не потерял данные
Зачем я переезжал
Три года мой сайт жил на обычном shared-хостинге за 300 рублей в месяц. Всё было нормально, пока сайт не начал расти: база стала 500 MB, посещаемость пошла вверх. Хостинг начал тупить: страницы грузились по 5 секунд, MySQL падал, техподдержка разводила руками.
Решил переезжать на свой VPS. Выбрал тариф на 4 GB RAM, 100 GB NVMe. Было страшно — у меня не было опыта администрирования серверов, только базовая работа с Linux.
План переезда
Я выделил субботу и воскресенье. План был такой:
1. Заказать VPS, установить Ubuntu 24.04
2. Поднять nginx, PHP, MySQL
3. Установить WordPress, перенести файлы
4. Импортировать базу данных
5. Настроить DNS
6. Молиться
На деле всё заняло около 6 часов с учётом граблей.
Что пошло не так
Перенос базы. Дамп MySQL весил 500 MB. Команда mysqldump на старом хостинге отваливалась с таймаутом через 30 секунд. Пришлось делать дамп по таблицам:
for table in $(mysql -u user -p db -e "SHOW TABLES;" | tail -n+2); do mysqldump -u user -p db $table >> dump.sql; done
Заняло минут 20, но сделано.
Перенос файлов. Через scp тянул wp-content с картинками (6 GB) — висел 2 часа. Хостинг ограничивал скорость до 1 MB/s. Запустил вечером, лёг спать. Утром всё было на месте.
Права доступа. На новом сервере WordPress ругался «не могу создать папку uploads». Оказалось, папки принадлежат root. Исправил chown.
DNS. Поменял NS-записи у регистратора. Ждал 4 часа, пока распространится. Всё это время часть пользователей видела старый сайт, часть — новый.
Что я узнал
Делайте дамп базы и файлов ДО того, как трогать DNS. Проверьте, что новый сервер работает идеально, прежде чем переключать трафик. И оставьте запасной план на случай, если что-то пойдёт не так (у меня был — включить старый хостинг обратно).
Сейчас сайт летает: TTFB 0.03 секунды, страницы грузятся за 0.1 секунды. Переезд того стоил.
Выбор хостинга — тот ещё квест
Перед переездом я перерыл кучу форумов. Честно говоря, глаза разбегались. DigitalOcean, Hetzner, Timeweb, Selectel — у каждого свои плюсы и минусы. Я остановился на Hetzner CX42 за 8 евро: 4 vCPU, 8 GB RAM, 80 GB NVMe. Для моего проекта — с головой.
Установка заняла 15 минут. Выбрал Ubuntu 24.04 LTS, потому что на ней сижу уже года три и знаю все грабли. После установки первым делом отключил вход по паролю, настроил SSH по ключу. Если ты читаешь это и ещё не сделал — сделай прямо сейчас. Потом поблагодаришь.
Настройка сервера — тут я наступил на первые грабли
Думал, поставлю nginx, PHP, MySQL одной командой — и поплыло. Нет. Начал с установки Nginx — всё ок. PHP 8.3 — ок. MySQL 8 — ок. А потом понял, что забыл про PHP-FPM. Без него nginx не дружит с PHP. Ставил полчаса, читал доки, матерился.
Дальше — WordPress. Скачал, распаковал. Всё бы ничего, но права на папки — отдельная боль. На старом хостинге файлы были у пользователя www-data, а на новом я создал своего юзера. Пришлось разбираться с chown, chmod, umask. Два часа убил на эту херню.
Перенос базы — филиал ада
Я уже говорил про дамп по таблицам? Если нет — слушай. Старый хостинг обрубал mysqldump через 30 секунд. Пробовал увеличить timeout в конфиге — не дали. У них свой phpMyAdmin, но он тоже вис на 500-мегабайтном дампе. Пришлось городить скрипт на PHP, который по 10 таблиц за раз выгружал. На всё ушло минут 40.
Импорт на новом сервере прошёл за 5 минут. Тут повезло. После импорта проверил — все таблицы на месте, посты есть, комментарии есть. Выдохнул.
DNS — отдельная песня
Я переключил NS на Cloudflare, потому что хотел бесплатный CDN и защиту от DDoS. Настройка заняла 10 минут, но вот TTL… Я оставил 24 часа, думая «потом изменю». Не менял. И когда пришло время переключать — ждал почти сутки, пока DNS обновился. В итоге часть трафика шла на старый хостинг, часть — на новый. Кто-то писал, что сайт тормозит, кто-то — что летает. Советую ставить TTL 300 секунд за сутки до переезда.
Совет тем, кто только собирается переезжать
Не делайте это на продыхающих глазах. Выделите выходной, заварите чаю, подготовьте план Б. У меня вот план Б был — оставить старый хостинг включённым на неделю. И правильно сделал, потому что первый день после переезда я лазил по серверу и правил ошибки: то кеш не работает, то картинки не грузятся, то права не те.
Через неделю всё устаканилось. Я отключил старый хостинг, сэкономил 300 рублей в месяц и забыл про тормоза. Если у тебя сайт начал тупить — не терпи, переезжай. Это не страшно, если подготовиться.
Расширю рассказ о переносе сайта с хостинга на хостинг дополнительными деталями. Зачем я переезжал. Три года мой сайт жил на обычном shared-хостинге за 300 рублей в месяц. Всё было нормально, пока сайт не начал расти: база стала 500 MB, посещаемость пошла вверх. Хостинг начал тупить: страницы грузились по 5 секунд, MySQL падал, техподдержка разводила руками. Классическая ситуация: дешёвый shared-хостинг не рассчитан на рост. Когда сайт перерастает тариф, начинаются лимиты по процессору, памяти и вводу-выводу. Решил переезжать на свой VPS. Выбрал тариф на 4 GB RAM, 100 GB NVMe. Было страшно — у меня не было опыта администрирования серверов, только базовая работа с Linux. Но страх преодолевается подготовкой.
План переезда. Я выделил субботу и воскресенье. План был такой: заказать VPS, установить Ubuntu 24.04; поднять nginx, PHP, MySQL; установить WordPress, перенести файлы; импортировать базу данных; настроить DNS; молиться. На деле всё заняло около 6 часов с учётом граблей. Планирование — это половина успеха. Я расписал шаги, оценил время и подготовил план Б. Чёткий план избавляет от паники: когда знаешь, что делать дальше, ошибки не выводят из равновесия. Даже если что-то идёт не так, ты просто переходишь к запасному варианту. Подготовка — лучший антидепрессант при переезде.
Что пошло не так — перенос базы. Дамп MySQL весил 500 MB. Команда mysqldump на старом хостинге отваливалась с таймаутом через 30 секунд. Пришлось делать дамп по таблицам: for table in $(mysql -u user -p db -e «SHOW TABLES;» | tail -n+2); do mysqldump -u user -p db $table >> dump.sql; done. Заняло минут 20, но сделано. Shared-хостинги часто ограничивают время выполнения скриптов — отсюда таймауты на больших дампах. Дамп по таблицам обходит это ограничение. Это универсальный приём для переноса больших баз с ограниченных хостингов. На новом сервере импорт занял 5 минут — там лимитов нет. Выдохнул после проверки: все таблицы на месте.
Перенос файлов. Через scp тянул wp-content с картинками (6 GB) — висел 2 часа. Хостинг ограничивал скорость до 1 MB/s. Запустил вечером, лёг спать. Утром всё было на месте. Ограничение скорости — ещё одна классика shared-хостингов. Учитывайте это в планировании: большой объём файлов лучше запускать на ночь. Альтернатива — использовать rsync с сжатием или заархивировать файлы на старом хостинге и скачать один архив. Мой совет: для больших wp-content используйте rsync — он докачивает только изменившиеся файлы и устойчив к обрывам. Ночной запуск и rsync превращают двухчасовую передачу в спокойный процесс.
Права доступа. На новом сервере WordPress ругался «не могу создать папку uploads». Оказалось, папки принадлежат root. Исправил chown. Эта ошибка — самая частая после переноса: файлы, распакованные под root, не дают веб-серверу записывать файлы. Решение: chown -R на папку сайта, чтобы владельцем стал пользователь веб-сервера. Урок: после распаковки файлов всегда проверяйте права доступа. Стандарт: папки 755, файлы 644, владелец — пользователь веб-сервера. Одна команда chown решает проблему за секунду, но если о ней забыть — час танцев с правами. Добавьте это в чек-лист переезда.
DNS. Поменял NS-записи у регистратора. Ждал 4 часа, пока распространится. Всё это время часть пользователей видела старый сайт, часть — новый. DNS-переключение — самый долгий и непредсказуемый этап переезда. Я переключил NS на Cloudflare, потому что хотел бесплатный CDN и защиту от DDoS. Настройка заняла 10 минут, но вот TTL… Я оставил 24 часа, думая «потом изменю». Не менял. И когда пришло время переключать — ждал почти сутки, пока DNS обновился. В итоге часть трафика шла на старый хостинг, часть — на новый. Кто-то писал, что сайт тормозит, кто-то — что летает. Советую ставить TTL 300 секунд за сутки до переезда.
Что я узнал. Делайте дамп базы и файлов ДО того, как трогать DNS. Проверьте, что новый сервер работает идеально, прежде чем переключать трафик. И оставьте запасной план на случай, если что-то пойдёт не так (у меня был — включить старый хостинг обратно). Это три золотых правила переезда. Сначала подготовка и тестирование на новом сервере, потом переключение. Параллельная работа старого и нового хоста — ваша страховка: если что-то не так, вы откатываетесь назад. Никогда не отключайте старый хостинг, пока новый не работает идеально хотя бы сутки. Сейчас сайт летает: TTFB 0.03 секунды, страницы грузятся за 0.1 секунды. Переезд того стоил.
Выбор хостинга — тот ещё квест. Перед переездом я перерыл кучу форумов. Честно говоря, глаза разбегались. DigitalOcean, Hetzner, Timeweb, Selectel — у каждого свои плюсы и минусы. Я остановился на Hetzner CX42 за 8 евро: 4 vCPU, 8 GB RAM, 80 GB NVMe. Для моего проекта — с головой. Выбор VPS-провайдера — это вопрос баланса цены, качества и расположения. Hetzner дал оптимальное соотношение. Установка заняла 15 минут. Выбрал Ubuntu 24.04 LTS, потому что на ней сижу уже года три и знаю все грабли. После установки первым делом отключил вход по паролю, настроил SSH по ключу. Если ты читаешь это и ещё не сделал — сделай прямо сейчас. Потом поблагодаришь.
Настройка сервера — тут я наступил на первые грабли. Думал, поставлю nginx, PHP, MySQL одной командой — и поплыло. Нет. Начал с установки Nginx — всё ок. PHP 8.3 — ок. MySQL 8 — ок. А потом понял, что забыл про PHP-FPM. Без него nginx не дружит с PHP. Ставил полчаса, читал доки, матерился. Это классическая ошибка новичка: nginx и PHP — это два компонента, которые нужно соединить через PHP-FPM. Настройка связки nginx + PHP-FPM — обязательный шаг, о котором легко забыть. Дальше — WordPress. Скачал, распаковал. Всё бы ничего, но права на папки — отдельная боль. На старом хостинге файлы были у пользователя www-data, а на новом я создал своего юзера. Пришлось разбираться с chown, chmod, umask. Два часа убил на эту херню.
Перенос базы — филиал ада. Я уже говорил про дамп по таблицам? Если нет — слушай. Старый хостинг обрубал mysqldump через 30 секунд. Пробовал увеличить timeout в конфиге — не дали. У них свой phpMyAdmin, но он тоже вис на 500-мегабайтном дампе. Пришлось городить скрипт на PHP, который по 10 таблиц за раз выгружал. На всё ушло минут 40. Импорт на новом сервере прошёл за 5 минут. Тут повезло. После импорта проверил — все таблицы на месте, посты есть, комментарии есть. Выдохнул. Урок простой: большие базы с shared-хостингов выгружайте порциями. Скрипт по таблицам — универсальное решение. Проверка после импорта обязательна: количество постов, комментариев, плагинов должно совпадать с оригиналом.
DNS — отдельная песня. Я переключил NS на Cloudflare, потому что хотел бесплатный CDN и защиту от DDoS. Настройка заняла 10 минут, но вот TTL… Это уже было выше, но повторю главное: установите TTL 300 секунд за сутки до переезда. Тогда переключение DNS пройдёт за 5 минут, а не за сутки. Cloudflare даёт бесплатный CDN, кеширование статики и защиту от атак — это бесплатный апгрейд скорости и безопасности. Плюс в Cloudflare удобно управлять DNS-записями. Но настройка NS на Cloudflare требует времени на распространение. Учитывайте этот этап в плане переезда и закладывайте запас времени.
Совет тем, кто только собирается переезжать. Не делайте это на продыхающих глазах. Выделите выходной, заварите чаю, подготовьте план Б. У меня вот план Б был — оставить старый хостинг включённым на неделю. И правильно сделал, потому что первый день после переезда я лазил по серверу и правил ошибки: то кеш не работает, то картинки не грузятся, то права не те. Через неделю всё устаканилось. Я отключил старый хостинг, сэкономил 300 рублей в месяц и забыл про тормоза. План Б — это не трусость, а разумная страховка. Первый день после переезда почти всегда требует доводки. Не отключайте старый сервер сразу — дайте себе неделю на стабилизацию.
Если у тебя сайт начал тупить — не терпи, переезжай. Это не страшно, если подготовиться. Переезд с shared-хостинга на VPS — это не космическая технология, а последовательность понятных шагов: подготовка, перенос файлов и базы, настройка сервера, переключение DNS. Каждый шаг имеет свои подводные камни, но все они преодолимы. Я прошёл этот путь без опыта администрирования и справился за выходные. Результат — сайт летает, расходы ниже, полный контроль над сервером. Если ваш сайт перерос хостинг — не бойтесь, готовьте план и переезжайте. Это один из самых полезных шагов в развитии любого проекта.