database 如何 pg_dump RDS Postgres 数据库?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/31881786/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 07:58:16  来源:igfitidea点击:

How to pg_dump an RDS Postgres database?

databasepostgresqlamazon-web-services

提问by Brendan

How can I connect to my RDS instance using pg_dump?

如何使用 pg_dump 连接到我的 RDS 实例?

This is the instance's endpoint:

这是实例的端点:

<long public dns thing>:5432

So I'm running this command:

所以我正在运行这个命令:

pg_dump -h <long public dns thing> -p 5432 -f dump.sql

And getting this:

并得到这个:

pg_dump: [archiver (db)] connection to database "brendan" failed:
could not connect to server: Connection refused
Is the server running on host "<long public dns thing>"
(<IP address>) and accepting TCP/IP connections on port 5432?

This is Amazon's troubleshooting advice:

这是亚马逊的故障排除建议:

Cannot Connect to Amazon RDS PostgreSQL DB Instance

无法连接到 Amazon RDS PostgreSQL 数据库实例

The most common problem when attempting to connect to a PostgreSQL DB instance is that the security group assigned to the DB instance has incorrect access rules. By default, DB instances do not allow access; access is granted through a security group. To grant access, you must create your own security group with specific ingress and egress rules for your situation. For more information about creating a security group for your DB instance, see Create a Security Group.

尝试连接到 PostgreSQL 数据库实例时最常见的问题是分配给数据库实例的安全组具有不正确的访问规则。默认情况下,数据库实例不允许访问;通过安全组授予访问权限。要授予访问权限,您必须针对您的情况创建具有特定入口和出口规则的自己的安全组。有关为数据库实例创建安全组的更多信息,请参阅创建安全组。

The most common error is could not connect to server: Connection timed out. If you receive this error, check that the host name is the DB instance endpoint and that the port number is correct. Check that the security group assigned to the DB instance has the necessary rules to allow access through your local firewall.

最常见的错误是无法连接到服务器:连接超时。如果您收到此错误,请检查主机名是否为数据库实例终端节点以及端口号是否正确。检查分配给数据库实例的安全组是否具有允许通过本地防火墙进行访问的必要规则。

Is there a way to specify my security group from pg_dump? If so, do I have to get a local copy of that the way that I need an ssh key when ssh'ing?

有没有办法从 pg_dump 指定我的安全组?如果是这样,我是否必须像在 ssh'ing 时需要 ssh 密钥那样获取本地副本?

Is it a mistake to even try to use pg_dump remotely? Should I be trying to just ssh onto the instance instead, or doing something else entirely?

甚至尝试远程使用 pg_dump 是错误的吗?我应该尝试仅通过 ssh 连接到实例,还是完全做其他事情?

回答by Brendan

Step 1: Create a security group on AWS that has your computer's IP address white listed.

步骤 1:在 AWS 上创建一个安全组,将您的计算机的 IP 地址列入白名单。

Step 2: Add that security group to the database instance you want to connect to.

步骤 2:将该安全组添加到您要连接的数据库实例。

Step 3: Run pg_dump. Make sure to specify your user name (thanks @LHWizard) with the -U command. In this case mine wasn't 'postgres', so I guess generally you'll have to look in aws to find it. Also make sure to specify your database's name: in some command line tools there's a -d switch for that, but if you check pg_dump's usage:

第 3 步:运行 pg_dump。确保使用 -U 命令指定您的用户名(感谢 @LHWizard)。在这种情况下,我的不是“postgres”,所以我想通常你必须查看 aws 才能找到它。还要确保指定您的数据库名称:在某些命令行工具中,有一个 -d 开关,但是如果您检查 pg_dump 的用法:

Usage:
  pg_dump [OPTION]... [DBNAME]

you can see that it's a formal argument. So the whole command (in my case) was:

你可以看到这是一个正式的论证。所以整个命令(就我而言)是:

pg_dump -h <public dns> -U <my username> -f dump.sql <name of my database>

Notice that specifying the port number wasn't necessary -- I think because port 5432 is THE port for postgres.

请注意,没有必要指定端口号——我认为是因为端口 5432 是 postgres 的端口。