【Rails】backup というgemを使いファイルやデータベースのバックアップをとる

backup という gem を使いファイルやデータベースのバックアップをとる手順を紹介したいと思います。

https://github.com/meskyanichi/backup
https://github.com/meskyanichi/backup/wiki

インストールする

$ gem install backup
$ rbenv rehash
$ mkdir ~/demo; cd demo # 作業用ディレクトリを作成しておく

ファイルのバックアップ

「ローカルストレージにファイルを保存してメールを送信する」という設定で設定ファイルを生成する

$ backup generate:model --trigger file_backup --archives --storages='local' --notifiers='mail' --config-path='~/demo/backup'

~/demo/backup/models/file_backup.rb ~/demo/backup/config.rb というファイルが生成される。

テスト用のファイルを作成する

~/demo/test1.txt
~/demo/test2/test2.txt
~/demo/test2/test3/test3.txt

$ echo test1 > ~/demo/test1.txt
$ mkdir -p test2/test3
$ echo test2 > ~/demo/test2/test2.txt
$ echo test3 > ~/demo/test2/test3/test3.txt

バックアップの詳細な設定をする

# ~/demo/backup/models/file_backup.rb

Model.new(:file_backup, 'Description for file_backup') do
  split_into_chunks_of 250

  archive :my_archive do |archive|
    archive.root "~/demo" # ルートディレクトリを指定することができる

    # バックアップするファイルを指定する
    archive.add "test1.txt" # ファイル
    archive.add "test2/" # ディレクトリ

    # バックアップから除外するファイルを指定する
    archive.exclude "test2/test2.txt"
  end

  store_with Local do |local|
    local.path       = "~/demo/backups/" # バックアップファイルが作成される場所を指定する
    local.keep       = 5
  end


  # 今回はGmailでメール送信のテストをする
  notify_by Mail do |mail|
    mail.on_success           = true
    mail.on_warning           = true
    mail.on_failure           = true

    mail.from                 = "sender@example.com"
    mail.to                   = "receiver@example.com"
    mail.address              = "smtp.gmail.com"
    mail.port                 = 587
    mail.domain               = "example.com"
    mail.user_name            = "Gmailのユーザ名"
    mail.password             = "Gmailのパスワード"
    mail.authentication       = "plain"
    mail.encryption           = :starttls
  end
end

バックアップ処理を実行する

$ backup perform --trigger file_backup --root-path ~/demo/backup

処理が正常に終了すると

~/demo/backups/ 配下にバックアップファイルが作成され、ログファイルが添付されたメールが送信される。

展開すると以下ファイルがバックアップされている。
my_archive/test1.txt
my_archive/test2/test3/test3.txt

MySQL のバックアップ

「DropboxにMySQLのダンプファイルを保存する」という設定で設定ファイルを生成する

$ backup generate:model --trigger mysql_backup --databases='mysql' --storages='dropbox' --config-path='~/demo/backup'

~/demo/backup/models/mysql_backup.rb というファイルが生成される。

Dropbox Datastore APIへの登録を行なう

登録方法は以下記事を参考にしてください。

Dropbox Datastore APIへアプリを登録する手順

登録後 App key App secret をメモしておく。

バックアップの詳細な設定をする

# ~/demo/backup/models/mysql_backup.rb

Model.new(:mysql_backup, 'Description for mysql_backup') do
  split_into_chunks_of 250

  database MySQL do |db|
    db.name               = "demo"
    db.username           = "root"
    db.password           = ""
    db.host               = "localhost"
    db.port               = 3306
    db.socket             = "/tmp/mysql.sock"
  end

  ## メモしておいたApp key, App secret をそれぞれ設定する
  store_with Dropbox do |db|
    db.api_key     = "App key"
    db.api_secret  = "App secret"
    db.access_type = :app_folder
    db.path        = "backups"
    db.keep        = 25
  end
end

バックアップ処理を実行する

$ backup perform --trigger mysql_backup --root-path ~/demo/backup

途中で以下のようなメッセージが表示されるのでブラウザでURLにアクセスして表示された画面で許可ボタンをクリックする。 これでDropboxと連携できたのでEnter/Returnを押す。

Visit the following URL to authorize your Dropbox App with Backup:

  https://www.dropbox.com/1/oauth/authorize?oauth_token=xxxxxxxxxxxxxxxxxxx

Hit "Enter/Return" once you're authorized.

処理が正常に終了すると

~/Dropbox/アプリ/アプリ名/backups/ 配下にバックアップファイルが作成される。

展開すると以下ファイルがバックアップされている。
databases/MySQL.sql