从远程服务器向本地主机进行pg_dump

9

大家好,我需要帮助将远程AWS服务器上的PostgreSQL数据库转储到我的本地PostgreSQL数据库。希望您能提供翻译。

我一直在尝试使用这个堆栈帖子中的答案,但转储过程一直失败。

我正在使用以下命令:

pg_dump -C -h ssh ubuntu@ec2-59-16-143-85.eu-west-1.compute.amazonaws.com -U dev_user paycloud_dev | psql -h localhost -U dev_user paycloud_dev

但我一直收到错误提示

pg_dump: too many command-line arguments (first is "paycloud_dev")

无法确定我做错了什么
另外,dev_user是我在本地机器和远程服务器上设置的postgreSQL角色。paycloud_dev是两者上的数据库名称(所有者为dev_user)。
编辑1:
根据一篇已被删除的帖子尝试了以下命令。
pg_dump -C -h ec2-59-16-143-85.eu-west-1.compute.amazonaws.com -U dev_user paycloud_dev | psql -h localhost -U dev_user paycloud_dev 

这现在给我报错了。
pg_dump: [archiver (db)] connection to database "paycloud_dev" failed: could not connect to server: Connection refused
Is the server running on host "ec2-59-16-143-85.eu-west-1.compute.amazonaws.com" (59.16.143.85) and accepting
TCP/IP connections on port 5432?

我进入了AWS并注意到服务器的弹性IP地址。然后我尝试了以下操作(使用私有IP地址)。

pg_dump -C -h 170.30.43.35 -U dev_user paycloud_dev | psql -h localhost -U dev_user paycloud_dev

这要求我输入paycloud_dev的密码,当我输入后会暂停2到3分钟,然后出现以下提示:
pg_dump: [archiver (db)] connection to database "paycloud_dev" failed: could not connect to server: Connection refused
Is the server running on host "170.30.43.35" and accepting
TCP/IP connections on port 5432?

我尝试编辑AWS安全组,添加一个接受所有流量的规则(端口范围为0-65535),但仍然出现相同的错误。
编辑2: 根据pokoli的文章尝试了以下操作。
ssh ubuntu@ec2-59-16-143-85.eu-west-1.compute.amazonaws.com pg_dump -C -h  -U dev_user paycloud_dev | psql -U dev_user paycloud_dev

但它并没有起作用。它先要求我输入我的笔记本电脑的psql密码,然后在我输入任何内容之前,就会出现错误。

[sudo] password for alzer: pg_dump: too many command-line arguments (first is "paycloud_dev")

请尝试运行"pg_dump --help"获取更多信息。

有人能帮忙吗?


你的PostgreSQL可能不允许外部连接。请参考这篇教程了解如何允许它。此外,如果你使用防火墙,你需要允许入站连接到TCP端口5432,除非你使用非标准端口。 - Gyrocode.com
你链接的答案和你发布的命令完全不一样。 - Falmarri
2个回答

8

您需要使用ssh连接到远程主机,执行dump并将其传输到本地机器。以下命令应该可以实现:

ssh ubuntu@ec2-59-16-143-85.eu-west-1.compute.amazonaws.com -C pg_dump  -U dev_user paycloud_dev | psql -U dev_user paycloud_dev

该命令将在需要时要求两个用户的密码,并且playcloud_dev数据库应该存在于本地,否则转储将失败。

谢谢,我今晚回到电脑前会尝试这个方法。 - Al D
抱歉,这是一个命令行错误(-C必须在pg_dump之前,-h标志不是必需的)。你能试试新的命令吗? - pokoli
不行,这也失败了 - 尝试了几个变化但是出现了错误 [sudo] password for alzer: pg_dump: [archiver (db)] connection to database "paycloud_dev" failed: FATAL: Peer authentication failed for user "dev_user" - Al D
@AI-D使用另一种连接Postgres的字符串成功了。也许你也可以尝试一下?ssh -i <path to keypair.pem file> <EC2 server on AWS with SSH access> -C "pg_dump -Fc postgresql://<postgres username>@<RDS server host on AWS>:5432/<remote database name>" | pg_restore -d <local database name> - peralmq

3

尝试通过ssh隧道执行此操作。

ssh -fT -L 5432:127.0.0.1:5432 %remote_user_login%@%your_aws_host% sleep 10
pg_dump -C -h localhost -U dev_user paycloud_dev | psql -h localhost -U dev_user paycloud_dev

首先,创建 SSH 隧道并进行端口映射。

然后,在 "安全组" 中查看您的 AWS 安全设置,可能会忘记打开端口。


1
如果您需要将密码传递给pg_dump,最简单的方法是“env PGPASSWORD=xxx pg_dump ...”。 - astgtciv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接