【问题标题】:How to connect with pgAdmin3 in the AWS PostgreSQL database?如何连接 AWS PostgreSQL 数据库中的 pgAdmin3?
【发布时间】:2017-11-04 04:22:31
【问题描述】:

我无法通过本地计算机远程连接 AWS postgres。

我绝对没有连接到 AWS 服务器中的 postgres 远程。

我已经关注了其他主题,但我仍然困惑为什么不连接任何地方?

.

在我的远程服务器中,我遵循以下 3 个步骤:

1) 我将远程数据库的端口改为5434

2) 在postgresql.conf 文件中,我将“*”设置为listen_addresses 标志。

pg_hba.conf 文件中我设置了host all all 0.0.0.0/0 md5 属性

3) 我重启远程服务器的 postgres 服务

PgAdmin3 错误输出:

05:17:44 PM: Error: SSH error: Error when starting up SSH session with error code -8 [Unable to exchange encryption keys]

我没有成功访问远程到 AWS RDBMS 的 postgres。我遵循以下说明:http://imperialwicket.com/aws-install-postgresql-90-on-amazon-linux

.

截图:

我关注以下所有主题:

.

我配置pgAdmin3访问如下:

  • MY_IP_HERE 我用 AWS ipv4 设置
  • my_user_here我用我的数据库用户设置

.

.

.

然后我尝试使用 HTTP 隧道连接我的远程数据库

.

.

我失败了

.

.

pgAdmin3 中有时会出现此弹出错误:

ASSERT INFO:
/usr/include/wx-3.0/wx/strvararg.h(456): assert "(argtype & (wxFormatStringSpecifier<T>::value)) == argtype" failed in wxArgNormalizer(): format specifier doesn't match argument type

BACKTRACE:
[1] wxMBConvUTF32LE::~wxMBConvUTF32LE()
[2] char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag)
[3] char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag)
[4] char* std::string::_S_construct<char*>(char*, char*, std::allocator<char> const&, std::forward_iterator_tag)
[5] wxListEvent::~wxListEvent()
[6] wxAppConsoleBase::CallEventHandler(wxEvtHandler*, wxEventFunctor&, wxEvent&) const
[7] wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
[8] wxEvtHandler::SearchDynamicEventTable(wxEvent&)
[9] wxEvtHandler::TryHereOnly(wxEvent&)
[10] wxEvtHandler::DoTryChain(wxEvent&)
[11] wxEvtHandler::ProcessEvent(wxEvent&)
[12] wxWindowBase::TryAfter(wxEvent&)
[13] wxEvtHandler::SafelyProcessEvent(wxEvent&)
[14] wxToolBarBase::OnLeftClick(int, bool)
[15] g_signal_emit_valist
[16] g_signal_emit_by_name
[17] g_signal_emit_valist
[18] g_signal_emit
[19] g_closure_invoke
[20] g_signal_emit_valist
[21] g_signal_emit
[22] g_closure_invoke
[23] g_signal_emit_valist
[24] g_signal_emit
[25] gtk_propagate_event
[26] gtk_main_do_event
[27] g_main_context_dispatch
[28] g_main_loop_run
[29] gtk_main
[30] wxGUIEventLoop::DoRun()
[31] wxEventLoopBase::Run()
[32] wxAppConsoleBase::MainLoop()
[33] wxEntry(int&, wchar_t**)
[34] __libc_start_main

【问题讨论】:

    标签: postgresql amazon-web-services ssh amazon-ec2 pgadmin


    【解决方案1】:

    我有同样的问题,我找到了解决方案(适用于 Linux)。

    使用以下命令行:

    sudo ssh -N -L 1234:yourrdsendpointname.us-east-1.rds.amazonaws.com:5432 ec2-user@56.78.123.45 -i yourkeyfile.pem
    

    在此示例中,1234 是本地端口(在本地主机中可用),yourrdsendpointname.us-east-1.rds.amazonaws.com 是您在aws中的RDS数据库,ec2-user是有权限连接到rds数据库的ec2实例的默认用户,56.78.123.45是ec2的公共IP实例和 yourkeyfile.pem 是您访问 ec2 实例的密钥。

    当您运行此命令时,您可以使用 pgAdmin 或 psql 命令访问本地主机和端口 1234 中的数据库(请注意,此命令应在终端中运行以保持隧道打开)。

    更多解释你可以去这里。

    https://medium.com/@michalisantoniou6/connect-to-an-aws-rds-using-an-ssh-tunnel-22f3bd597924

    【讨论】:

    • 我也发布了有关 RDS 实例错误的更多详细信息。
    • @FrancisRodrigues 首先让我们将数据库 RDS 移植到您的本地计算机中。第一次尝试:sudo ssh -N -L 6969:ENDPOINTNAMERDS:5432 USER@[PUBLIC_IP_EC2] -i KEYFILE.pem(5432 是 AWS 中 RDS 数据库的端口,6969 是您的可用端口机器)保持此命令的进程运行(如果没问题,您将看不到输出)。之后你应该连接数据库,使用主机名:localhost 和端口 6969(命令 ssh 应该'正在运行并且没有输出)
    • 我知道了,但我在 PgAdmin3 和 linux 控制台中收到了 time out 的答案,但我的输出为空。
    • @FrancisRodrigues 如果您收到超时,您需要检查您的 RDS 实例的安全组(端口 5432 应该打开),检查 RDS 数据库是否配置为侦听端口 5432,如果是另一个端口仅将 5432 更改为另一个端口。
    • 对于默认 AWS Beanstalk 创建指向端口 5432 的 RDS 实例,是的,它已打开并正在运行 Publicly accessible: yes
    【解决方案2】:

    @Nielson 我尝试使用 SSH 隧道在 linux 控制台上连接。

    5433 是我机器的 postgres 本地端口

    $ sudo lsof -i :5433

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME pgadmin3 1329 paneladm 15u IPv4 1534908 0t0 TCP debian:56894->ec2-[MY_IP].[ZONE].compute.amazonaws.com:5433 (SYN_SENT)

    终端下方是空的。

    在 PgAdmin3 中也没有连接。

    我也不知道如何与 RDS 建立外部连接,因为默认组已经允许外部连接。

    参考资料:

    AWS RDS - Connecting to a DB Instance Running the PostgreSQL Database Engine

    SSH tunneling. "bind Address already in use"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 2017-11-26
      • 2020-05-04
      相关资源
      最近更新 更多