web-dev-qa-db-ja.com

RDS Postgresデータベースをpg_dumpする方法は?

Pg_dumpを使用してRDSインスタンスに接続するにはどうすればよいですか?

これはインスタンスのエンドポイントです。

<long public dns thing>:5432

だから私はこのコマンドを実行しています:

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

これを取得する:

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?

これはAmazonのトラブルシューティングアドバイスです。

Amazon RDS PostgreSQL DBインスタンスに接続できません

PostgreSQL DBインスタンスに接続しようとする際の最も一般的な問題は、DBインスタンスに割り当てられたセキュリティグループに不正なアクセスルールがあることです。デフォルトでは、DBインスタンスはアクセスを許可しません。セキュリティグループを介してアクセスが許可されます。アクセスを許可するには、状況に応じた特定の入力および出力ルールを使用して独自のセキュリティグループを作成する必要があります。 DBインスタンスのセキュリティグループの作成の詳細については、セキュリティグループの作成を参照してください。

最も一般的なエラーは、サーバーに接続できなかったことです:接続がタイムアウトしました。このエラーを受け取った場合は、ホスト名がDBインスタンスのエンドポイントであり、ポート番号が正しいことを確認してください。 DBインスタンスに割り当てられたセキュリティグループに、ローカルファイアウォールを介したアクセスを許可するために必要なルールがあることを確認します。

Pg_dumpからセキュリティグループを指定する方法はありますか?もしそうなら、私はsshするときにsshキーが必要な方法でそのローカルコピーを取得する必要がありますか?

リモートでpg_dumpを使用しようとするのは間違いですか?代わりにインスタンスにsshするだけなのか、それともまったく別のことをするべきなのか?

45
Brendan

ステップ1:コンピューターのIPアドレスがホワイトリストに登録されているセキュリティグループをAWSで作成します。

ステップ2:そのセキュリティグループを接続するデータベースインスタンスに追加します。

ステップ3:pg_dumpを実行します。 -Uコマンドでユーザー名を指定してください(@LHWizardに感謝)。この場合、私のものは「postgres」ではなかったので、一般的にはそれを見つけるにはawsを調べる必要があると思います。また、データベースの名前を指定してください:コマンドラインツールの中には-dスイッチがありますが、pg_dumpの使用法を確認する場合:

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

正式な議論であることがわかります。したがって、コマンド全体(私の場合)は次のとおりです。

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

ポート番号を指定する必要はないことに注意してください-ポート5432がpostgresのポートだからだと思います。

61
Brendan