新手问题 大家都用什么备份方案?

chairy11 · 2014年11月21日 · 最后由 chairy11 回复于 2014年11月25日 · 4390 次阅读

最近开始学习备份,用的是 mysql 数据库,asset 方面暂时好像也没有什么需要备份的。

想请教一下,大家都用什么备份方案呢?是直接写 mysql 的脚本之类,还是用 backup+whenever+dropbox?

看到@Rei这篇《用 Backup 和 Whenever 进行备份》,但 dropbox 的话,难道不会被墙吗?我自己的电脑就老是连不上 dropbox。

备到 s3 上

我现在用 Linode 自带的每日备份。

#2 楼 @Rei 可是我现在用的是单独的服务器,不是云主机……另外,你那篇两年前的方案现在不好用了么?

#3 楼 @chairy11 恢复数据的时候没有还原整个服务器快。

想了想,数据库信息异地备多一份更保险,有空我再加上。

记得楼主是个妹子 国内备份数据库的话,可以注册个阿里云,用 RDS 同步

记得楼主是个妹子 国内备份数据库的话,可以注册个阿里云,用 RDS 同步

#6 楼 @huihen 阿里云要钱啊!RDS 是什么意思?

#4 楼 @Rei 我在跟你的帖子做,用 backup+whenever+local 的方案。我的 app 没弄 mail 部分,那就不能在备份失败时通知我,是吗?

#4 楼 @Rei 我在跟你的帖子做,用 backup+whenever+local 的方案。我的 app 没弄 mail 部分,那就不能在备份失败时通知我,是吗?

backup+whenever+dropbox,项目在 digitalocean,所以工作良好。

#11 楼 @chunlea DO 直接 snapshot 不就行了为啥还要搞这么麻烦

#10 楼 @chairy11 目前使用的方法:自己用 ruby 写好脚本,然后用 crontab 定时跑任务备份到本地 (笨方法)。

#12 楼 @blacktulip 客户的项目,我全当学习 backup 了……其实是我把这事给忘了……

看成了备案

S3 便宜,稳定

#17 楼 @chairy11 可以备份到七牛云存储或者阿里云 OSS。建 1 个私有的 bucket

S3 吧

namespace :db do
  namespace :data do
    desc "Dump the database data to db/data/[RAILS_ENV]_dump.sql. Specify another file with DB_DUMP=db/data/my_dump.sql" 
    task :dump => [:environment, :load_config] do
      FileUtils.mkdir_p("#{Rails.root}/db/data")
      filename = ENV['DB_DUMP'] || "#{Rails.root}/db/data/#{Rails.env}_dump.sql"
      config = ActiveRecord::Base.configurations[Rails.env]

      case config["adapter"]
      when /mysql/
        ActiveRecord::Base.establish_connection(config)
        File.open(filename, "w+") do |f|
          if config["password"].blank?
            f << `mysqldump -h#{config["host"] || "localhost"} -u#{config["username"]} -q --single-transaction #{config["database"]}`
          else
            f << `mysqldump -h#{config["host"] || "localhost"} -u#{config["username"]} -p#{config["password"]} -q --single-transaction #{config["database"]}`
          end
        end
      when /sqlite/
        ActiveRecord::Base.establish_connection(config)
        File.open(filename, "w+") do |f|
          f << `sqlite3  #{config["database"]} .dump`
        end
      else
        raise "Task not supported by '#{config['adapter']}'" 
      end
    end

    desc "Backup the database to Amazon S3"
    task :backup => :dump do
      timestamp   = Time.now.strftime('%Y_%m_%d_%H_%M_%S')
      backup_filename = "#{Rails.env}_dump_#{timestamp}.sql.gz"
      sql_file = "#{Rails.root}/db/data/#{Rails.env}_dump.sql"

      Zlib::GzipWriter.open("#{Rails.root}/db/data/#{backup_filename}") do |gz|
        gz.write File.read(sql_file)
      end

      storage = Fog::Storage.new(:provider => 'AWS',
                                 :aws_access_key_id => ENV['AWS_S3_ACCESS_KEY_ID'],
                                 :aws_secret_access_key => ENV['AWS_S3_SECRET_ACCESS_KEY'])

      storage.put_object(APP_CONFIG['s3_backup_bucket'],
                         backup_filename,
                         File.read("#{Rails.root}/db/data/#{backup_filename}"),
                         'x-amz-acl' => 'private')

      File.delete("#{Rails.root}/db/data/#{backup_filename}") # Clean up our leftovers
    end
  end
end

#19 楼 @Yujing_Z 国内的服务器,不怕被墙么?

Arq with Amazon S3

MySQL 用他家自己的备份功能就好。文件如果不多的话每日备份就好。

23 楼 已删除

#18 楼 @cn_boris 也是用 backup 吗?要写什么接口之类吗?

数据量不大的话,整个脚本每日备份,经常检查就好了;太大的话,得指定一定的策略了,比如每日增量等等。

#24 楼 @chairy11 如果数据量不大的话,可以写个 sh 脚本每天凌晨或其他业务低峰时段逻辑导出数据库(即导出 sql 文件),然后通过阿里云 OSS 的 rest api(或直接调用 SDK)上传至 OSS。

P.s. 我们的生产环境是直接用阿里云的 RDS 服务(即:saas 形式的 mysql 数据库),自带备份,简单好用。而且其实也不贵。

#26 楼 @cn_boris 我们这边是通信运营商,自家好像有很多服务器,所以生产环境肯定不用云。但备份我是想着不要放本地的好。我有又拍云的账号,所以到时看看吧,主要我不懂写什么接口什么的,dropbox 和 s3 这种现成的又被墙……

#27 楼 @chairy11 刚看到有这个 gem http://rubygems.org/gems/backup_upyun

我自己 blog 用的是七牛,公司用的是阿里云。手头上没有又拍云的帐号,不确定能不能用。你试试看~

#28 楼 @cn_boris 谢谢:)我研究一下……

需要 登录 后方可回复, 如果你还没有账号请 注册新账号