从Heroku Bash中创建数据库备份

时间:2014-06-04 09:53:48

标签: postgresql heroku heroku-postgres

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

2 个答案:

答案 0 :(得分:2)

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

免责声明:这名义上要求您使用一些红宝石,但与使用heroku postgres(包括django应用程序)的任何heroku雪松应用程序一起使用。

答案 1 :(得分:1)

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

    # 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以某种方式触发备份。