首页 > 解决方案 > 在远程服务器上移动 PostgreSQL 数据库的最快方法

问题描述

我需要将一个超过 100GB 的相当大的数据库从旧的远程服务器移动到新的远程服务器。

我通过 ssh 连接到新服务器并从那里使用以下命令,但我认为这不是最好/最快的方法。

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

有更好的方法吗?我正在考虑使用某种数据压缩来减少从两台机器传输的数据,但我不知道该怎么做以及它是否有用。

标签: databasepostgresqlbackuppsqlpg-dump

解决方案


这将取决于瓶颈是什么。

您可以pg_basebackup改用,这样您就无需像这样计算新索引了pg_dump。但是,您可能正在传输更多数据,因此这可能会使您放慢速度而不是加快速度。

如果网络带宽是一个严重的瓶颈,那么您可以登录到源服务器(123.123.123.123)并执行pg_basebackup -Ft -D- -Xnone ... | pxz > backup.tar.xz,然后使用 scp 或 rsync 将压缩数据传输到新服务器。您将必须有一个 wal 存档,以便新服务器可以获取它错过的任何 WAL 文件。可以调整复制槽,所以你不需要这个,但是 pg_basebackup 并不容易做到这一点。

xz 很慢。如果你有很多 CPU,pxz 的速度会慢一些,但仍然很慢。所以这样做是值得的,因为网络仍然比 pxz 慢。如果网络不是那么慢,您可以使用更快但不太彻底的压缩方法,例如 gzip 或其并行版本 pigz。

你也可以用pg_dump ... | pxz > dump.sql.xz.

如果您不想将压缩文件存储在原始服务器上,您可以使用类似ssh 123.123.123.123 "pg_dump ...|pxz" | xzcat | psql .... (或者你可以用 pg_basebackup 做同样的事情)。但这里的问题是,您无法从网络故障中恢复,而必须从头开始重复整个过程。这就是为什么如果有空间我更喜欢将文件保存在原始服务器上。


推荐阅读