VDS · Базы данных

Перенос базы с другого сервера

Порядок переезда базы на 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;), и запустите приложение против новой базы в тестовом режиме.

Переключение

  1. Включите режим обслуживания или остановите приложение на старом сервере.
  2. Снимите финальный дамп изменений за время подготовки.
  3. Восстановите его на новой машине.
  4. Переключите строку подключения приложения и перезапустите службу.
  5. Держите старый сервер ещё неделю, не удаляя данные.

Пункт пятый не пропускайте: обнаружить пропавшую таблицу через три дня — обычное дело.

Частые ошибки

СимптомПричина
role does not exist при восстановленииРоли не перенесены — --no-owner плюс создание ролей вручную
КрякозябрыРазные кодировки: восстанавливайте в базу с utf8mb4 или UTF8
Последовательности начинаются с 1Дамп только данных без setval
Восстановление идёт часамиИндексы строятся на ходу; для больших баз используйте pg_restore -j 4
Кончилось место посерединеНе учли размер дампа рядом с данными

Перед переносом проверьте, что новая база слушает только 127.0.0.1. Открывать её наружу «на время переезда» не нужно — перенос идёт по SSH, см. удалённое подключение.