Що потрібно встановити локально (Ubuntu)
Встанови клієнтські утиліти PostgreSQL: pg_dump
, psql
, pg_restore
.
sudo apt update
sudo apt install postgresql-client
Кроки міграції
Ідея: не зберігати дамп на серверах. Зробити дамп з віддаленого сервера на свій локальний ПК, потім передати його на новий сервер і там відновити.
1) Створення дампу з віддаленого сервера локально
pg_dump -h OLD_SERVER_IP -U OLD_USER -Fc -d OLD_DB -f dump_file.dump
Пояснення ключів: -h
(хост), -U
(користувач), -Fc
(custom format), -d
(БД), -f
(вихідний файл локально).
1.1) Варіант з розбиттям на частини (якщо треба)
pg_dump -h OLD_SERVER_IP -U OLD_USER -Fc -d OLD_DB | split -b 10G - dump_file.dump.part_
Це створить локально файли типу dump_file.dump.part_aa
, dump_file.dump.part_ab
тощо.
2) Передача дампу на новий сервер
Один файл:
scp dump_file.dump NEW_USER@NEW_SERVER_IP:/tmp/
Або частинами:
scp dump_file.dump.part_* NEW_USER@NEW_SERVER_IP:/tmp/
3) Збирання файлу на новому сервері (якщо передавали частинами)
cat /tmp/dump_file.dump.part_* > /tmp/dump_file.dump
4) Відновлення на новому сервері
Створити базу (за потреби):
createdb -h localhost -U NEW_USER NEW_DB
Відновити з дампу:
pg_restore -h localhost -U NEW_USER -d NEW_DB -v /tmp/dump_file.dump
Без попередньої передачі на сервер
pg_restore -h SERVER_IP -U USERNAME -d DBNAME -v dump_file.dump
або
cat dump_file.dump.part_* | pg_restore -h NEW_SERVER -U NEW_USER -d NEW_DB -v
Альтернатива: стрімінг без проміжного файлу (навіть локально)
Якщо місця мало на локальному ПК, можна “прокачати” дані напряму зі старого на новий сервер (через локальний комп’ютер):
pg_dump -h OLD_SERVER_IP -U OLD_USER -Fc -d OLD_DB | ssh NEW_USER@NEW_SERVER_IP "pg_restore -U NEW_USER -d NEW_DB -h localhost"
Хоча в такому випадку може мати сенс пряма передача з сервера на сервер.
Примітка: якщо з'єднання обірветься, процес доведеться повторити.
Додаткові поради
- Для великих файлів зручно перевіряти цілісність: на локальному ПК зроби
md5sum
, на сервері порівняй. - За потреби додай компресію (зменшить обсяг):
pg_dump -h OLD_SERVER_IP -U OLD_USER -Fc -d OLD_DB | gzip | split -b 10G - dump_file.dump.gz.part_ # збірка та відновлення на новому сервері cat /tmp/dump_file.dump.gz.part_* | gunzip | pg_restore -h localhost -U NEW_USER -d NEW_DB -v
- Переконайся, що версії PostgreSQL сумісні (ідеально — однакові або новіша на стороні відновлення).
Коментарі
Дописати коментар