如何正确将pg_restore与 AWS RDS 结合使用以还原 postgresql 数据库



我正在尝试将我的 Postgresql 数据库恢复到 AWS RDS。我想我快到了。我可以获取转储,并在本地重新创建数据库,但我错过了将其还原到 AWS RDS 的最后一步。

这是我正在做的事情:

  1. 我得到我的转储

$ pg_dump -h my_public dns -U myusername -f dump.sql myawsdb

  1. 我在 shell 中创建一个名为 test 的本地数据库:

create database test;

  1. 我将转储放入我的测试数据库

$ psql -U myusername -d test -f dump.sql

目前为止,一切都好。

I get an error: psql:dump.sql:2705: ERROR: role "rdsadmin" does not exist,但我想我可以忽略它,因为我的数据库包含所有内容。(我用\list和\connect测试进行了检查)。

现在,我想将此转储/测试还原到我的 AWS RDS。

遵循此 https://gist.github.com/syafiqfaiz/5273cd41df6f08fdedeb96e12af70e3b 我现在应该做:

pg_restore -h <host> -U <username> -c -d <database name> <filename to be restored>

但是我的文件名是什么,我的数据库名称是什么?

我试过了:

pg_restore -h mydns -U myusername -c -d myawsdbname testpg_restore -h mydns -U myusername -c -d myawsdbname dump.sql

还有几个我不记得的选项。

大多数时候它会告诉我这样的事情:pg_restore: [archiver] could not open input file "test.dump": No such file or directory

或者,对于第二个:input file appears to be a text format dump. Please use psql.

索蒙能为我指明正确的方向吗?非常感谢帮助!

编辑:所以我使用$ pg_dump -Fc mydb > db.dump创建了一个.dump文件 使用这个文件我认为它有效。现在我得到错误[archiver (db)] could not execute query: ERROR: role "myuser" does not exist Command was: ALTER TABLE public.users_user_user_permissions_id_seq OWNER TO micromegas;

我能吃吗?

编辑2:我摆脱了添加标志的错误 - 无所有者 --角色=mypguser --无特权 --无所有者

好的,因为这显然对某些人有用,我将发布 - 尽我所能 - 对此的回答。我将更广泛地回答这个问题,而不是太特定于 AWS,因为 a) 我不再使用此实例,b) 我也不完全记得我是如何做到这一点的。

但是我获得了PostreSQL的经验,并且由于AWS RDS也只是一个postgres实例,因此步骤应该非常相似。

以下是我在还原 postgreSQL 数据库实例时建议的步骤:

  1. .dump格式而不是.sql格式拉取备份。为什么?文件大小会更小,更容易恢复。使用以下命令执行此操作:

pg_dump -h <your_public_dns_ending_with.rds.amazonaws.com> -U <username_for_your_db> -Fc <name_of_your_db> > name_for_your_backup.dump

  1. 现在您可以轻松地将备份还原到任何 postgreSQL 实例。通常,我建议使用新用户名和新数据库名称设置新的数据库实例。假设您有一个名为testname的数据库,其中包含超级用户testuser。然后你可以做:

pg_restore --no-owner --no-privileges --role=testuser -d testname <your_backup_file.dump>

这应该会还原您的实例。

还原到 AWS 或任何远程 postgreSQL 实例时,您必须使用-h-flag 指定主机。所以这可能是这样的:

pg_restore -h <your_public_dns_ending_with.rds.amazonaws.com> -p 5432 --no-owner --no-privileges --role=testuser -d testname <your_backup_file.dump>

如果您在远程 Linux 服务器上运行数据库实例,则主机将是您的远程 IP 地址 (-h <ip_od_server>),其余部分将相同。

我希望这有所帮助。如有任何问题,请发表评论,我会尽力提供更多帮助。

此命令对我有用,因为您的计算机可以访问 rds 或通过 aws 安全组访问计算机

psql -h your_public_dns_ending_with.us-east-2.rds.amazonaws.com -U yourusername -d db_name_to_backup_to < pg_dump_backup_file.sql

最新更新