Создайте резервную копию базы данных из Heroku Bash

Я хочу периодически архивировать дампы базы данных в свою учетную запись AWS в S3 и, в конечном итоге, в glacier. Есть ли способ сбросить базу данных postgresql в файловую систему dynos из dyno (откуда я могу отправить файл в AWS)? psql и pg_dump, похоже, недоступны на динамометре, и я не знаю, как запустить pgbackups из динамометра.


person huesforalice    schedule 04.06.2014    source источник
comment
Я не знаю ответа на ваш вопрос, но если ваша конечная цель — получить материал на S3, проверьте PG Backups, который сделает это автоматически.   -  person Jon Mountjoy    schedule 04.06.2014
comment
Да, я знаю, но это на самом деле удалит его оттуда через несколько дней, и я хотел бы сохранить все дампы в glacier.   -  person huesforalice    schedule 04.06.2014
comment
PGBackups великолепен, но он удаляет все через месяц. Нам также необходимо постоянно хранить регулярные резервные копии в Glacier, поэтому ответ на этот вопрос был бы потрясающим.   -  person B Robster    schedule 18.07.2014
comment
извините за мое невежество, но можете ли вы использовать SSH для создания туннеля и резервного копирования поверх него?   -  person Kirk Roybal    schedule 23.07.2014


Ответы (2)


Создайте отдельное приложение heroku для резервного копирования, которое использует гем pgbackups-archive, а затем настройте планировщик heroku для периодического запуска гем pgbackups-archive на вашем DATABASE_URL (вам нужно будет импортировать эту переменную среды из другого приложения), как описано здесь.

Отказ от ответственности: это номинально требует, чтобы вы использовали немного ruby, но работает в сочетании с любым приложением heroku cedar, использующим heroku postgres (включая приложения django).

person B Robster    schedule 18.07.2014
comment
Спасибо за предложение, Бен. Я искал решение для приложений Python/Django. На самом деле я также получил сообщение от службы поддержки Heroku, в котором утверждалось, что они работают над решением, позволяющим скормить pgbackups свой собственный ведро S3, и это было бы здорово. - person huesforalice; 18.07.2014
comment
Да, мы также используем python / django для нашего приложения, но настроить другое приложение heroku только для резервного копирования из нашего приложения с тем же DATABASE_URL, что и наше приложение, используя метод, указанный в ссылке, было легким сыром и лучшим, что мы могли найти. - person B Robster; 21.07.2014

Лучшее, что я мог придумать сейчас, — это использовать аддон 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.

person huesforalice    schedule 04.09.2014