【问题标题】:Store heroku pg backup on own S3 bucket将 heroku pg 备份存储在自己的 S3 存储桶上
【发布时间】:2020-05-31 05:35:38
【问题描述】:

Heroku 提供 PG 数据库的自动和计划备份。 https://devcenter.heroku.com/articles/heroku-postgres-data-safety-and-continuous-protection

GBackups 将启动一个专用的测功机来转储您的数据库 并将其上传到 S3

简单的问题:是否可以将计划的 PG 备份上传到自己的 OWN S3 存储桶?只需控制备份文件并且不受存储空间的限制。如果可能,研究这个主题并没有为我提供答案。

【问题讨论】:

    标签: heroku


    【解决方案1】:

    您可以使用 Heroku 调度程序和 bash 脚本来完成。

    # Set the script to fail fast if there
    # is an error or a missing variable
    
    set -eu
    set -o pipefail
    
    #!/bin/sh
    
    # Download the latest backup from
    # Heroku and gzip it
    
    heroku pg:backups:download --output=/tmp/pg_backup.dump --app $APP_NAME
    gzip /tmp/pg_backup.dump
    
    # Encrypt the gzipped backup file
    # using GPG passphrase
    
    gpg --yes --batch --passphrase=$PG_BACKUP_PASSWORD -c /tmp/pg_backup.dump.gz
    
    # Remove the plaintext backup file
    
    rm /tmp/pg_backup.dump.gz
    
    # Generate backup filename based
    # on the current date
    
    BACKUP_FILE_NAME="heroku-backup-$(date '+%Y-%m-%d_%H.%M').gpg"
    
    # Upload the file to S3 using
    # AWS CLI
    
    aws s3 cp /tmp/pg_backup.dump.gz.gpg "s3://${S3_BUCKET_NAME}/${BACKUP_FILE_NAME}"
    
    # Remove the encrypted backup file
    
    rm /tmp/pg_backup.dump.gz.gpg
    

    您可以查看this tutorial以获得详细的分步说明。

    【讨论】:

      【解决方案2】:

      一种选择是创建一个备份(出于性能原因,您甚至可以创建一个追随者数据库来创建它),然后通过流将备份下载到您的服务器,然后将其上传到您自己的 S3 存储桶中。

      如果您想要一个快速 Rail 应用程序来执行此操作,您可以设置 https://github.com/kjohnston/pgbackups-archive。除了创建一个追随者数据库之外,它还可以做所有事情,但是如果您不太关心 24/7 的性能,那么这应该没问题。我不知道为什么 Heroku 不为您自己的 S3 存储桶提供存储空间,因为它们自己存储在 S3 上。

      【讨论】:

        【解决方案3】:

        这里是a buildpack,用于定期执行此操作。它暂时没有更新,但您可以根据需要轻松更新/调整它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-13
          • 1970-01-01
          • 1970-01-01
          • 2020-09-17
          • 2021-10-04
          • 2016-12-09
          • 2022-01-20
          • 1970-01-01
          相关资源
          最近更新 更多