【问题标题】:Django + PostgreSQL backup and restore on an EC2 instanceEC2 实例上的 Django + PostgreSQL 备份和恢复
【发布时间】:2020-10-10 06:02:36
【问题描述】:

我有一个简单的单体架构:

托管在 EC2 实例上的 Django 项目与运行在同一实例上的 PostgreSQL 数据库通信。 考虑到流量和成本,我选择了这种架构。所以,不要在这个问题上抨击我。 :)

为了灾难恢复,我会定期转储我的数据库(完整转储pg_dump -U postgres fishercoder_db > fishercoder_dump.sql)。

在恢复时,我无法让 Django 和正在恢复的数据库彼此很好地交谈:

    1234563在我的垃圾场;
  1. 如果我先从转储中恢复数据库,那么我的 Django 应用程序由于权限不足而无法正常运行./manage.py migrate,详情请咨询here

我的问题是:

  1. 我的 DR 策略合理吗?还有其他更优化的方法吗?

  2. 如何让这种方法发挥作用:在新的 EC2 实例上恢复我的站点,并使用从 .sql 转储中恢复的数据库。

【问题讨论】:

    标签: python django postgresql amazon-web-services amazon-ec2


    【解决方案1】:

    我为此编写了自己的一组实用程序,因为我永远无法完全记住必要的命令行选项:https://github.com/FlipperPA/django-pg-copy

    您是否尝试过 pg_restore 使用这些选项?

    pg_restore -c --if-exists -h localhost -U [your_django_user] -d [your_django_db]  fishercoder_dump.sql
    

    您可能还想为您的转储考虑一些额外的参数:

    pg_dump -Fc -c -x ...
    

    -Fc: 自定义格式 -c:(或--clean):转储一个干净的版本,带有 DROPs 对象。 -x:跳过转储访问权限

    祝你好运!

    【讨论】:

    • 太棒了!感谢您令人难以置信的工作!我能够以这种方式和pg_restore 转储,但我不能使用我的fishercoderuser 运行pg_restore,相反,我必须使用postgres 用户恢复,但在那之后,当我使用fishercoderuser 时通过 sql 客户端连接到我的数据库,我无法查询我的表,上面写着 ERROR: permission denied for relation my_table
    • 使用postgres 恢复后,您应该能够更改恢复数据库的所有者。以postgresALTER DATABASE fishercoder_db OWNER TO fishercoderuser; 身份登录,试一试! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2018-10-12
    • 2017-02-14
    • 1970-01-01
    • 2010-10-05
    • 2012-11-05
    • 2014-08-30
    相关资源
    最近更新 更多