我需要将一个超过100 GB的大型数据库从旧的远程服务器移动到新的远程服务器。
我通过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
有没有更好的办法?我正在考虑使用某种数据压缩,以减少从两台机器传输的数据,但我不知道如何做到这一点,如果它是有用的。
我需要将一个超过100 GB的大型数据库从旧的远程服务器移动到新的远程服务器。
我通过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
有没有更好的办法?我正在考虑使用某种数据压缩,以减少从两台机器传输的数据,但我不知道如何做到这一点,如果它是有用的。
3条答案
按热度按时间b4lqfgs41#
这将取决于瓶颈是什么。
您可以使用
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来做同样的事情)。但这里的问题是,你不能从网络故障恢复,而必须从头开始重复整个过程。这就是为什么我更喜欢保存在原始服务器上的文件,如果有它的空间。jjjwad0x2#
你可以做一个副本,一旦数据库对齐,选择从站(新复制的)作为主站,并开始在这个上写。
例如Here,你可以开始学习postgres复制。
zyfwsgd63#
步骤:
1.允许远程连接到远程服务器https://www.bigbinary.com/blog/configure-postgresql-to-allow-remote-connection
1.如果使用Putty,请将0更改为30 https://i.stack.imgur.com/gDcbT.png
1.在远程服务器上创建名为
your_remote_database_name
的数据库1.连接ssh到本地服务器和
PGPASSWORD="your_local_posgres_user_password" pg_dump -C -h localhost -U postgres your_local_database_name | PGPASSWORD="your_remove_posgres_user_password" psql -h your_remote_ip -U postgres your_remote_database_name