Восстановите базу данных Postgres, используя pg_restore через SSH
У меня есть сервер базы данных без большого дискового пространства, поэтому я сделал резервную копию всей базы данных (давайте просто назовем ее красной) и сохранил ее локально, используя следующую команду (у меня не запущен pg на моем компьютере):
ssh admin@w.x.y.z "pg_dump -U postgres redblue -h localhost " \
>> db_backup_redblue.sql
Я хотел бы сейчас восстановить его на другом сервере (1.2.3.4), который содержит более старую версию базы данных "redblue" - однако хотел бы спросить, верно ли это, прежде чем я попробую:
ssh admin@1.2.3.4 "pg_restore -U postgres -C redblue" \
<< db_backup_redblue.sql
Я не был уверен, нужно ли мне делать -C с именем БД или нет?
Будет ли указанная выше команда перезаписывать / восстанавливать удаленную базу данных с помощью локального файла?
Спасибо!
2 ответа
Нет, это не принесет ничего хорошего.
Вы должны начать pg_restore
на машине, где находится свалка. На самом деле, так как это дамп простого формата, вы должны использовать psql
скорее, чем pg_restore
:
psql -h 1.2.3.4 -U postgres -d redblue -f db_backup_redblue.sql
Это требует, чтобы уже была пустая база данных redblue
в целевой системе.
Если вы хотите заменить существующую базу данных, вы должны использовать --clean
а также --create
варианты с pg_dump
,
Если вы хотите использовать SSL, вам нужно настроить сервер PostgreSQL на прием SSL-соединений, см. Документацию.
Я бы порекомендовал "пользовательский" формат pg_dump
,
Конечно, вы можете это сделать :) Предполагая, что вы используете ключи ssh для авторизации пользователя с исходного хоста на целевой хост.
На исходном хосте вы выполняете pg_dump, а затем перенаправляете через ssh на целевой хост следующим образом:
pg_dump -C nextcloud | ssh -i .ssh/pg_nextcloud_key postgres@192.168.0.54 psql -d template1
Надеюсь, это поможет ;)