【问题标题】:Restoring a postgres database I dumped from remote恢复我从远程转储的 postgres 数据库
【发布时间】:2020-06-17 06:56:10
【问题描述】:

我正在尝试使用 psql 转储和恢复托管在 AWS 堡垒上的 Postgres 数据库。为此,我需要打开一个 SSH 隧道。

我这样打开隧道: ssh -v -A admin@bastion.my.company.name -L 15432:databasename.amazonaws.com:5432 -N

然后转储它: pg_dump -v -h 0.0.0.0 -p 15432 -U postgres -d databasename --clean -T tablesINeed > ~/pgdumps/databasenamedump.sql

到目前为止一切顺利,我可以通过我的隧道。然后我关闭隧道并尝试恢复: psql -h 0.0.0.0 -p 5432 -U postgres -d databasename < ~/pgdumps/databasenamedump.sql

但我明白了:

psql:错误:无法连接到服务器:无法连接到服务器:连接被拒绝 服务器是否在主机“0.0.0.0”上运行并接受 端口 5432 上的 TCP/IP 连接?

怎么样?我可能在概念上不理解转储/恢复?一旦我有我的转储数据库,我只想运行它的本地实例。 我应该使用15432(我为ssh隧道打开的端口)来恢复吗?我害怕尝试,因为这是一个生产数据库。我尝试查看 psql 文档,但没有找到类似的场景

感谢您的澄清

【问题讨论】:

  • 确保本地实例在本地主机上运行;检查此本地实例上的“show listen_addresses”和“show port”。你可以通过运行“psql”以操作系统用户 postgres 连接到这个本地实例吗?

标签: postgresql amazon-web-services ssh psql restore


【解决方案1】:

一旦我转储了数据库,我只想运行它的本地实例。我应该使用 15432(我为 ssh 隧道打开的端口)来恢复吗?我不敢尝试,因为这是一个生产数据库。

你害怕是对的。这将恢复到您转储的同一数据库,这不是您想要发生的。由于您已将 --clean 指定给 pg_dump,因此转储后的生产更改可能会丢失。

pg_restore 不创建数据库实例,它只是恢复到已经运行的实例。因此,您必须首先执行initdb(或等效项)来创建这样的实例,然后使用pg_ctl start(或等效项)来启动它。当然,除非您已经完成了这些事情,但是您收到的错误消息表明您没有或没有正确执行。

我尝试查看 psql 文档,但没有找到类似的场景

psql 只是一个用于连接数据库的命令行“客户端”工具,它不是数据库软件本身,因此它的文档与您的关系不大。

您可能需要退后一步,从beginning 开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2021-12-23
    • 2010-09-27
    相关资源
    最近更新 更多