Самый быстрый способ переместить базу данных PostgreSQL на удаленный сервер - PullRequest
1 голос
/ 25 января 2020

Мне нужно переместить довольно большую базу данных размером чуть более 100 ГБ со старого удаленного сервера на новый удаленный сервер.

Я подключаюсь через s sh к новому серверу и использую следующее оттуда, но я не думаю, что это лучший / самый быстрый способ сделать это.

pg_dump -C -h 123.123.123.123 -U pgadmin -W -d db_name | psql -h 127.0.0.1 -U pgadmin -W -d db_name

Есть ли лучший способ сделать это? Я думаю о том, чтобы использовать какое-то сжатие данных, чтобы уменьшить объем данных, передаваемых с двух машин, но я не знаю, как это сделать и полезно ли это.

Ответы [ 2 ]

2 голосов
/ 25 января 2020

Это будет зависеть от того, что является узким местом.

Вместо этого вы можете использовать pg_basebackup, что избавит вас от необходимости вычислять новые индексы, как это делает pg_dump. Но вы можете передавать гораздо больше данных, что может замедлить вас больше, чем ускорит.

Если пропускная способность сети является серьезным узким местом, вы можете войти на исходный сервер (123.123.123.123 ) и выполните pg_basebackup -Ft -D- -Xnone ... | pxz > backup.tar.xz, затем используйте scp или rsyn c для передачи сжатых данных на новый сервер. Вам понадобится архив wal, чтобы новый сервер мог получать любые пропущенные WAL-файлы. Возможно, можно манипулировать слотами репликации, чтобы вам это не понадобилось, но pg_basebackup не позволяет легко это сделать.

xz очень медленный. pxz менее медленный, если у вас много процессоров, но все еще довольно медленный. Это стоит того, чтобы сеть работала медленнее, чем pxz. Если сеть не такая медленная, вы можете использовать более быстрый, но менее тщательный метод сжатия, например, gzip или его параллельную версию pigz.

Вы также можете сделать то же самое с pg_dump ... | pxz > dump.sql.xz.

Если вы не хотите хранить сжатый файл на исходном сервере, вы можете передавать его по сети на лету, используя что-то вроде ssh 123.123.123.123 "pg_dump ...|pxz" | xzcat | psql .... (Или вы можете сделать то же самое с pg_basebackup вместо этого). Но проблема в том, что вы не можете возобновить работу из-за сбоя в сети, но должны повторить все с нуля. Вот почему я предпочитаю сохранять файл на исходном сервере, если для этого есть место.

1 голос
/ 25 января 2020

Вы можете создать реплику, и после того, как базы данных будут выровнены, выберите подчиненный (новый реплицированный) в качестве главного и начните писать на нем.

Здесь , например, вы можете начать изучение postgres репликации.

...