Перенос базы с другого сервера
Порядок переезда базы на Millida VDS: подготовка, перенос дампа по сети, проверка целостности и переключение приложения с минимальным простоем.
Обновлено 23 августа 2026 г.
Переезд базы ломается не на командах, а на порядке действий: люди сначала переключают домен, а потом обнаруживают, что половина данных не доехала. Ниже последовательность, которая этого не допускает.
Подготовка
На новой машине поставьте ту же или более свежую версию сервера базы — PostgreSQL или MySQL. Понижение версии не поддерживается.
psql --version
mysql --version
df -h /
Свободного места нужно примерно в 2,5 раза больше размера базы: дамп, распакованные данные и запас. На VDS-1 это 40 ГБ всего, планируйте заранее.
Заведите пользователя и пустую базу с той же кодировкой, что на старом сервере.
Перенос данных
Самый простой путь — дамп через SSH, без промежуточных файлов:
ssh root@СТАРЫЙ 'pg_dump -Fc -U shop shop' > /srv/shop.dump
pg_restore -U postgres -d shop --no-owner --role=shop /srv/shop.dump
Для MySQL:
ssh root@СТАРЫЙ 'mysqldump --single-transaction --routines --events -u root shop' \
| mysql -u root shop
Роли и пользователи в дамп базы не попадают, их выгружают отдельно: pg_dumpall --roles-only или ручное создание — см. пользователи и права.
Полоса до 500 Мбит/с, поэтому база на 20 ГБ переезжает за считанные минуты; узким местом обычно оказывается запись на диск, ограниченная ступенью.
Проверка до переключения
Сверяйте не «сайт открылся», а числа:
SELECT relname, n_live_tup FROM pg_stat_user_tables ORDER BY n_live_tup DESC LIMIT 20;
SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema='shop';
Сверьте количество строк в ключевых таблицах со старым сервером, проверьте, что последовательности не сбросились (SELECT last_value FROM users_id_seq;), и запустите приложение против новой базы в тестовом режиме.
Переключение
- Включите режим обслуживания или остановите приложение на старом сервере.
- Снимите финальный дамп изменений за время подготовки.
- Восстановите его на новой машине.
- Переключите строку подключения приложения и перезапустите службу.
- Держите старый сервер ещё неделю, не удаляя данные.
Пункт пятый не пропускайте: обнаружить пропавшую таблицу через три дня — обычное дело.
Частые ошибки
| Симптом | Причина |
|---|---|
role does not exist при восстановлении | Роли не перенесены — --no-owner плюс создание ролей вручную |
| Крякозябры | Разные кодировки: восстанавливайте в базу с utf8mb4 или UTF8 |
| Последовательности начинаются с 1 | Дамп только данных без setval |
| Восстановление идёт часами | Индексы строятся на ходу; для больших баз используйте pg_restore -j 4 |
| Кончилось место посередине | Не учли размер дампа рядом с данными |
Перед переносом проверьте, что новая база слушает только
127.0.0.1. Открывать её наружу «на время переезда» не нужно — перенос идёт по SSH, см. удалённое подключение.