我们使用Heroku的PG备份,这非常棒http://addons.heroku.com/pgbackups
我目前每天手动将备份下载到我的计算机上,然后将其上传到我的S3帐户。有没有人知道如何设置一个cron作业来自动创建备份(每天都很好)并将其直接发送到我的S3帐户?
答案 0 :(得分:4)
我修补了宝石来修复B Seven提到的系统调用。抓住数据库参数的正则表达式正在破裂,因为非共享数据库的新DATABASE_URL现在包含端口号。
https://github.com/mokolabs/heroku_s3_backup
如果你在Cedar堆栈上,那么这个补丁应该适合你。但是我在Bamboo上,因为与pg_dump的版本冲突,它对我不起作用。 Postgres是Bamboo上的8.x版本,因此pg_dump无法从新的非共享数据库转储数据,因为它们都在Postgres版本9.1上运行。
如果我能找到Bamboo堆栈的解决方法,我会在这里更新gem和我的评论。
答案 1 :(得分:3)
如果你将它添加到lib / tasks并且运行herkou的cron插件将运行:
namespace :heroku do
desc "PostgreSQL database backups from Heroku to Amazon S3"
task :backup => :environment do
begin
require 'right_aws'
puts "[#{Time.now}] heroku:backup started"
name = "#{ENV['APP_NAME']}-#{Time.now.strftime('%Y-%m-%d-%H%M%S')}.dump"
db = ENV['DATABASE_URL'].match(/postgres:\/\/([^:]+):([^@]+)@([^\/]+)\/(.+)/)
system "PGPASSWORD=#{db[2]} pg_dump -Fc -i --username=#{db[1]} --host=#{db[3]} #{db[4]} > tmp/#{name}"
s3 = RightAws::S3.new(ENV['s3_access_key_id'], ENV['s3_secret_access_key'])
bucket = s3.bucket("#{ENV['APP_NAME']}-heroku-backups", true, 'private')
bucket.put(name, open("tmp/#{name}"))
system "rm tmp/#{name}"
puts "[#{Time.now}] heroku:backup complete"
# rescue Exception => e
# require 'toadhopper'
# Toadhopper(ENV['hoptoad_key']).post!(e)
end
end
end
task :cron => :environment do
Rake::Task['heroku:backup'].invoke
答案 2 :(得分:0)
恕我直言,最简单快速(10分钟)的方式是配置heroku-db-backup-s3 buildpack。没有代码需要,只需添加buildpack并设置一些环境变量和一个重新安排。