【问题标题】:Create database backup from within Heroku Bash从 Heroku Bash 中创建数据库备份
【发布时间】:2014-07-24 22:02:08
【问题描述】:

我想定期将数据库转储存档到我自己在 S3 中的 AWS 账户中,并最终在 Glacier 中。有没有办法从 dyno 中将 postgresql 数据库转储到 dynos 文件系统(然后我可以从那里将文件发送到 AWS)? psql 和 pg_dump 似乎在 dyno 上不可用,我不知道如何从 dyno 中运行 pgbackups。

【问题讨论】:

  • 我不知道你的问题的答案,但如果你的最终目标是在 S3 上获得东西,请查看PG Backups,它会自动完成。
  • 是的,我知道,但这实际上会在几天后从那里删除它,我想将所有转储文件保存在冰川中。
  • PGBackups 很棒,但它确实会在一个月后删除所有内容。我们还需要将定期备份永久存储到 Glacier,所以这个问题的答案会很棒。
  • '请原谅我的无知,但是你能用 SSH 创建一个隧道并在上面做备份吗?

标签: postgresql heroku heroku-postgres


【解决方案1】:

创建一个单独的 heroku 应用程序来执行备份,它使用 pgbackups-archive gem 然后设置一个 heroku 调度程序以定期在您的 DATABASE_URL 上运行 pgbackups-archive gem(您需要从其他应用程序导入该环境变量),如 here 所述。

免责声明:这名义上要求您使用一些 ruby​​,但可以与任何使用 heroku postgres 的 heroku cedar 应用程序(包括 django 应用程序)结合使用。

【讨论】:

  • 感谢本的建议。我正在寻找 Python / Django 应用程序的解决方案。实际上,我还收到了来自 Heroku 支持的消息,声称他们正在研究一种解决方案,您可以在其中提供 pgbackups 自己的 S3 存储桶,这将是很棒的。
  • 是的,我们也使用 python / django 作为我们的应用程序,但设置另一个 Heroku 应用程序只是为了从我们的应用程序进行备份,使用与我们的应用程序相同的 DATABASE_URL,使用链接中的方法,是简单的奶酪,是我们能找到的最好的。
【解决方案2】:

我现在能想到的最好方法是使用 pgbackups 插件(我一直在使用),然后每天从 s3 中提取最新备份并将其上传回我的存储桶。如果启用此插件,Heroku 会公开 PGBACKUPS_URL 环境变量。其余的会是这样的:

    # boto and requests are required, aws access credentials are in the settings file 

    url = settings.PGBACKUPS_URL + "/latest_backup"
    dumpfile = "./db_dump"

    # get latest backup info
    r = requests.get(url)
    dump_url = r.json()["public_url"]
    dump_timestamp = r.json()["finished_at"].replace("/", "-")
    dump_name = "db_dumps/" + dump_timestamp

    # write dump to file
    r = requests.get(dump_url, stream=True)
    if r.status_code == 200:
        with open(dumpfile, 'wb') as f:
            for chunk in r.iter_content():
                f.write(chunk)

    conn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
    bucket = conn.get_bucket(settings.AWS_DB_DUMPS_BUCKET)
    key = bucket.new_key(dump_name)
    key.set_contents_from_filename(dumpfile)

我还没有发现,是否可以通过 PGBACKUPS_URL 以某种方式触发备份。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多