Gem Backup - 备份你的服务器环境

huacnlee · 发布于 2012年03月19日 · 最后由 linsk 回复于 2013年09月05日 · 5953 次阅读
De6df3
本帖已被设为精华帖!

服务器上面你可能需要备份数据库、配置文件、甚至上传文件。 每个项目中反复写备份脚本很麻烦吧,试试 Backup 这个 gem。 他可以帮你...

  1. 备份数据库:
    • MySQL
    • PostgreSQL
    • MongoDB
    • Redis
  2. 备份文件或者目录...
  3. 备份日志文件...
  4. 备份到:
    • S3
    • Dropbox
    • SFTP
    • FTP
    • 当然还有本地目录
  5. 并且你还可以选择 gzip 或者其他的方式压缩文件
  6. 备份完成以后还可以通过 Twitter, Email 等方式提醒
  7. 它不仅仅只是用来备份 Ruby 项目的服务器,可以适用任何 Linux 或 Mac,任何数据,你可以用来做本地定期备份
  8. 用起来就是这么简单的定制文件,在配合 Crontab 定时执行就可以了:
Backup::Model.new(:sample_backup, 'A sample backup configuration') do

  split_into_chunks_of 4000

  database MySQL do |database|
    database.name               = 'my_sample_mysql_db'
    database.username           = 'my_username'
    database.password           = 'my_password'
    database.skip_tables        = ['logs']
    database.additional_options = ['--single-transaction', '--quick']
  end

  database MongoDB do |database|
    database.name             = 'my_sample_mongo_db'
    database.only_collections = ['users', 'events', 'posts']
  end

  archive :user_avatars do |archive|
    archive.add '/var/apps/my_sample_app/public/avatars'
  end

  archive :logs do |archive|
    archive.add     '/var/apps/my_sample_app/logs/production.log'
    archive.add     '/var/apps/my_sample_app/logs/newrelic_agent.log'
    archive.add     '/var/apps/my_sample_app/logs/other/'
    archive.exclude '/var/apps/my_sample_app/logs/other/exclude-this.log'
  end

  compress_with Gzip do |compression|
    compression.best = true
  end

  store_with SFTP, "Server A" do |server|
    server.username = 'my_username'
    server.password = 'secret'
    server.ip       = 'a.my-backup-server.com'
    server.port     = 22
    server.path     = '~/backups'
    server.keep     = 25
  end

  store_with SFTP, "Server B" do |server|
    server.username = 'my_username'
    server.password = 'secret'
    server.ip       = 'b.my-backup-server.com'
    server.port     = 22
    server.path     = '~/backups'
    server.keep     = 25
  end

  store_with S3 do |s3|
    s3.access_key_id      = 'my_access_key_id'
    s3.secret_access_key  = 'my_secret_access_key'
    s3.region             = 'us-east-1'
    s3.bucket             = 'my_bucket/backups'
    s3.keep               = 20
  end

  sync_with S3 do |s3|
    s3.access_key_id     = "my_access_key_id"
    s3.secret_access_key = "my_secret_access_key"
    s3.bucket            = "my-bucket"
    s3.path              = "/backups"
    s3.mirror            = true

    s3.directories do |directory|
      directory.add "/var/apps/my_app/public/videos"
      directory.add "/var/apps/my_app/public/music"
    end
  end

  notify_by Mail do |mail|
    mail.on_success = false
    mail.on_warning = true
    mail.on_failure = true
  end

  notify_by Twitter do |tweet|
    tweet.on_success = true
    tweet.on_warning = true
    tweet.on_failure = true
  end

end


项目地址: https://github.com/backup/backup


Update 2017-03

此方式 Ruby China 一直在使用,4 年里帮助我们确保有数据的备份保障,也曾经好几次帮助修复了数据。

Ruby China 目前的备份文件(未压缩)500M 左右,是存储在 UpYun 上的,保持存储两周的文件。

共收到 30 条回复
1

再搭配 whenever ,crontab 也用 ruby 写~

3

谢谢 @huacnlee 分享。

#1楼 @Rei 关于用Ruby实现的scheduler,我前段时间刚好研究了下,但是最后还是用系统自带的 crontab -e

crontab 系统自带,用系统自带的显得环保不浪费,而且crontab并不难用,也无需额外的第三方gem依赖,也无需启动/管理一个额外的ruby后台daemon(我的应用后台进程已经好几个了)。从你的使用角度,为什么偏好选用whenever?

96

这个太赞了!立即开始使用

De6df3

#2楼 @lgn21st whenever 只是帮助你生成 crontab 的格式,没有依赖的,最后运行的还是 crontab,与 whenever 无关。

De6df3

其实我也是今天才尝试,之前只是了解过,但一直没用上...确实非常给力,我在公司一个新服务器上面部署,一下就搞通了,现在正在给 Ruby China 部署

196

使用 whenever 才可以跟著 project 跑,可以 git 版本控制。而不是每 deploy 一臺就要去改一次。

plus, deploy 時如果有更動 whenever 檔,會自動幫忙更新 crontab。機器一多才不會死人....

我們自己公司專案一年前就是用 whenever + backup 在備份資料和執行例行程式了...

3

#4楼 @huacnlee 原来如此,谢谢,赞 whenever 一个!

De6df3

我之前是用 whenever 配合 shell 脚本备份的...汗啊 Backup 这个东西就像 Capistrano 一样,只有当你用过以后才知道你以前的做法有多么的土鳖

1

#2楼 @lgn21st 楼上都说了~

我开始也是不赞成用 ruby 管理 crontab,后来看懂原理原来就是是生成 crontab 配置然后交给 crontab 执行就果断用了。

96

rsync + crontab 最好

146

#10楼 @lgn21st 这个胡子是怎么回事?和GitHub CTO的胡子一样~ 自己画的?好吧,算我歪楼了 :)

3

#12楼 @skandhas 这是一个online的服务,http://mustachify.me/

146

#13楼 @lgn21st 收到~ thx!

611

收藏 thanks @huacnlee

96

过几天用这个备份一下自己的电脑数据

1520

明天来倒腾一下

1471

Forever呢?我用很好

96

有人直接安装 dropbox 来备份吗,以上方案不支持增量啊 http://1000umbrellas.com/2010/04/30/how-to-install-dropbox-on-a-headless-ubuntu-10-04-server

3253

backup 这个 gem 目前还对 rsync 的 daemon 模式支持还不是很好。看后面更新怎么样了。

142

Crontab + Rsync + mysqldump 来备份,看来起来真是好落后啊。

245

这个赞啊,晚上回去折腾折腾。

3253

我備份了個把月之後,再加入 keep 參數,是不是從修改起開始計數的啊? 我看前面的沒有自動清除呢。

920

#1楼 @Rei 请问恢复的策略是怎样的呢?

1

#24楼 @nouh 整个库导出备份的话就是整个导入了。

920

#25楼 @Rei backup能够对数据库进行增量的备份么,

1

#26楼 @nouh 我看了下好像没有。

4060

mark一下

29楼 已删除
96

突然觉得 百度云盘和微云的10t是不是有用武之地了。

De6df3 huacnlee 整理 Backup 存储到国内的云存储 中提及了此贴 11月28日 15:39
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册