我需要将一个100 an多一点的大型数据库从一个旧的远程服务器移动到一个新的远程服务器。
我正在通过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有没有更好的方法呢?我正在考虑使用某种类型的数据压缩,以减少从两台机器传输的数据,但我不知道如何做到这一点,它是否有用。
发布于 2020-01-26 01:07:53
这将取决于瓶颈是什么。
您可以改用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来做同样的事情)。但这里的问题是,您不能从网络故障中恢复,而必须从头开始重复整个过程。这就是为什么我更喜欢将文件保存在原始服务器上,如果有空间的话。
发布于 2020-01-26 00:34:43
您可以进行复制,一旦数据库对齐,选择从属数据库(新复制的那个)为主数据库,并开始在此数据库上写入数据。
例如,Here,您可以开始学习postgres复制。
https://stackoverflow.com/questions/59911116
复制相似问题