如何正确使用 pg_restore 和 AWS RDS 来恢复 postgresql 数据库
How to use pg_restore with AWS RDS correctly to restore postgresql database
我正在尝试将我的 Postgresql 数据库恢复到 AWS RDS。我想我快到了。我可以获取转储,并在本地重新创建数据库,但我错过了将其还原到 AWS RDS 的最后一步。
这是我正在做的事情:
- 我得到了我的垃圾
$ pg_dump -h my_public dns -U myusername -f dump.sql myawsdb
- 我在 shell 中创建了一个名为测试的本地数据库:
create database test;
- 我将转储放入我的测试数据库
$ psql -U myusername -d test -f dump.sql
到目前为止一切顺利。
I get an error: psql:dump.sql:2705: ERROR: role "rdsadmin" does not exist
,但我想我可以忽略它,因为我的数据库包含所有内容。 (我检查了 \list 和 \connect 测试)。
现在我想将此 dump/test 恢复到我的 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 test
pg_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;
我可以忽略吗?
EDIT2:我摆脱了添加标志的错误--no-owner --role=mypguser --no-privileges --no-owner
好的,因为这显然对某些人有用,所以我会 post - 尽我所能 - 对此做出回答。我会更广泛地回答这个问题,而不是太特定于 AWS,因为 a) 我不再使用这个实例 b) 我也不完全记得我是怎么做到的。
但我获得了使用 PostreSQL 的经验,并且由于 AWS RDS 也只是一个 postgres 实例,所以步骤应该非常相似。
以下是我在恢复 postgreSQL 数据库实例时推荐的步骤:
- 以
.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
- 现在您可以轻松地将备份恢复到任何 postgreSQL 实例。一般来说,我建议使用新的用户名和新的数据库名称设置一个新的数据库实例。假设您有一个名为
testname
的数据库,超级用户为 testuser
。那么你可以这样做:
pg_restore --no-owner --no-privileges --role=testuser -d testname <your_backup_file.dump>
这应该会恢复您的实例。
恢复到 AWS 或任何远程 postgreSQL 实例时,您必须使用 -h
标志指定主机。所以这可能是这样的:
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>
),其余的将是一样。
希望对您有所帮助。有任何问题请评论,我会尽力帮助更多。
我正在尝试将我的 Postgresql 数据库恢复到 AWS RDS。我想我快到了。我可以获取转储,并在本地重新创建数据库,但我错过了将其还原到 AWS RDS 的最后一步。
这是我正在做的事情:
- 我得到了我的垃圾
$ pg_dump -h my_public dns -U myusername -f dump.sql myawsdb
- 我在 shell 中创建了一个名为测试的本地数据库:
create database test;
- 我将转储放入我的测试数据库
$ psql -U myusername -d test -f dump.sql
到目前为止一切顺利。
I get an error: psql:dump.sql:2705: ERROR: role "rdsadmin" does not exist
,但我想我可以忽略它,因为我的数据库包含所有内容。 (我检查了 \list 和 \connect 测试)。
现在我想将此 dump/test 恢复到我的 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 test
pg_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;
我可以忽略吗?
EDIT2:我摆脱了添加标志的错误--no-owner --role=mypguser --no-privileges --no-owner
好的,因为这显然对某些人有用,所以我会 post - 尽我所能 - 对此做出回答。我会更广泛地回答这个问题,而不是太特定于 AWS,因为 a) 我不再使用这个实例 b) 我也不完全记得我是怎么做到的。
但我获得了使用 PostreSQL 的经验,并且由于 AWS RDS 也只是一个 postgres 实例,所以步骤应该非常相似。
以下是我在恢复 postgreSQL 数据库实例时推荐的步骤:
- 以
.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
- 现在您可以轻松地将备份恢复到任何 postgreSQL 实例。一般来说,我建议使用新的用户名和新的数据库名称设置一个新的数据库实例。假设您有一个名为
testname
的数据库,超级用户为testuser
。那么你可以这样做:
pg_restore --no-owner --no-privileges --role=testuser -d testname <your_backup_file.dump>
这应该会恢复您的实例。
恢复到 AWS 或任何远程 postgreSQL 实例时,您必须使用 -h
标志指定主机。所以这可能是这样的:
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>
),其余的将是一样。
希望对您有所帮助。有任何问题请评论,我会尽力帮助更多。