Я хочу периодически архивировать дампы базы данных в свою учетную запись AWS в S3 и, в конечном итоге, в glacier. Есть ли способ сбросить базу данных postgresql в файловую систему dynos из dyno (откуда я могу отправить файл в AWS)? psql и pg_dump, похоже, недоступны на динамометре, и я не знаю, как запустить pgbackups из динамометра.
Создайте резервную копию базы данных из Heroku Bash
Ответы (2)
Создайте отдельное приложение heroku для резервного копирования, которое использует гем pgbackups-archive, а затем настройте планировщик heroku для периодического запуска гем pgbackups-archive на вашем DATABASE_URL (вам нужно будет импортировать эту переменную среды из другого приложения), как описано здесь.
Отказ от ответственности: это номинально требует, чтобы вы использовали немного ruby, но работает в сочетании с любым приложением heroku cedar, использующим heroku postgres (включая приложения django).
Лучшее, что я мог придумать сейчас, — это использовать аддон pgbackups (который я использовал), а затем ежедневно извлекать последнюю резервную копию из s3 и загружать ее обратно в свое ведро. Переменная env PGBACKUPS_URL предоставляется Heroku, если этот аддон включен. Остальное будет примерно так:
# 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.