12/08/2018, 13:43

Auto backup database in rails application

Mở đầu Sẽ cực kỳ nguy hiểm và thiếu chuyên nghiệp nếu chạy một máy chủ mà không có thiết lập backup dữ liệu tự động. Chúng ta nên sao lưu cơ sở dữ liệu và các tệp tin hàng giờ, hoặc hoặc hàng ngày trên máy chủ. Nếu có bất cứ điều gì làm dữ liệu sai, hoặc làm hỏng hệ thống thì chúng ta đã có một ...

Mở đầu

Sẽ cực kỳ nguy hiểm và thiếu chuyên nghiệp nếu chạy một máy chủ mà không có thiết lập backup dữ liệu tự động. Chúng ta nên sao lưu cơ sở dữ liệu và các tệp tin hàng giờ, hoặc hoặc hàng ngày trên máy chủ. Nếu có bất cứ điều gì làm dữ liệu sai, hoặc làm hỏng hệ thống thì chúng ta đã có một bản sao lưu để khôi phục liệu hệ thống.

Với Ruby on Rails, điều này khá là đơn giản với Backup gem, nó có tất cả các tính năng chúng ta có thể cần bao gồm cả thông báo qua email khi có bất cứ chuyện gì xảy ra.

Thiết lập sao lưu

1. Cài đặt

    gem install backup
  • Note: Chúng ta không thêm gem backup vào Gemfile của bất kỳ ứng dụng nào.

2. Cấu hình

Backup gem hỗ trợ các công nghệ sau đây.

Database

MySQL
PostgreSQL
MongoDB
Redis
Riak SQLite

Storages

Amazon S3
Rackspace Cloud Files
Ninefold
Dropbox
FTP
SFTP
SCP
RSync
Local

Compressors and Encryptors

Gzip
Bzip2

OpenSSL
GPG

Syncers

Amazon S3 Cloud Syncer
Rackspace Cloud Files Cloud Syncer
RSync Syncer for local, local-to-remote (Push) or remote-to-local (Pull) operations.

Notifiers

Email (SMTP, Sendmail, Exim and File delivery)
Twitter
Campfire
Prowl
Hipchat
Pushover
Nagios
HTTP POST (compatible with a variety of services)
Zabbix

Ở trong bài viết này, chúng ta có thể generate một backup model với các tùy chọn sau:

  • PostgreSQL database

  • Store in S3

  • Compressor: Gzip format

  • Send email to notify after backup process finished.

$ backup generate:model --trigger your_backup --databases="postgresql" --storages="s3" --compressor="gzip" --notifiers="mail"

Với command trên nó sẽ tạo ra file model backup tại ~/Backup/models/your_backup.rb

Hoặc có thể xem thêm tại Generator để tùy biến các option khác nhau.

Model.new(:your_backup , 'Description for your_backup') do

  ##
  # PostgreSQL [Database]
  #
  database PostgreSQL do |db|
    # To dump all databases, set `db.name = :all` (or leave blank)
    db.name               = "database_name"
    db.username           = "username"
    db.password           = "password"
    db.host               = "localhost"
    db.port               = 5432
    db.socket             = "/tmp/pg.sock"
    # When dumping all databases, `skip_tables` and `only_tables` are ignored.
    db.skip_tables        = ["skip", "these", "tables"]
    db.only_tables        = ["only", "these", "tables"]
    db.additional_options = ["-xc", "-E=utf8"]
  end

  ##
  # Amazon Simple Storage Service [Storage]
  #
  store_with S3 do |s3|
    # AWS Credentials
    s3.access_key_id     = "access_key_id"
    s3.secret_access_key = "secret_access_key"
    # Or, to use a IAM Profile:
    # s3.use_iam_profile = true

    s3.region            = "us-east-1"
    s3.bucket            = "bucket-name"
    s3.path              = "path/to/backups"
  end

  ##
  # Gzip [Compressor]
  #
  compress_with Gzip

  ##
  # Mail [Notifier]
  #
  # The default delivery method for Mail Notifiers is 'SMTP'.
  # See the documentation for other delivery options.
  #
  notify_by Mail do |mail|
    mail.on_success           = true
    mail.on_warning           = true
    mail.on_failure           = true

    mail.from                 = "sender@email.com"
    mail.to                   = "receiver@email.com"
    mail.address              = "smtp.gmail.com"
    mail.port                 = 587
    mail.domain               = "your.host.name"
    mail.user_name            = "sender@email.com"
    mail.password             = "password"
    mail.authentication       = "plain"
    mail.encryption           = :starttls
  end

end

3. Kiểm tra cấu hình

$ backup check

Nếu mọi thứ đều thành công thì có message: [2016/08/19 13:32:20][info] Configuration Check Succeeded.

4. Tạo sao lưu

backup perform --trigger your_backup Sau khi chạy câu lệnh hoàn tất, chúng ta sẽ nhận được email thông báo và có thể xem bản sao lưu của mình thông qua đường dẫn lưu trữ của S3 mà chúng ta đã cấu hình.

5. Tự động sao lưu sử dụng 'whenever'

Step1: Add gem

gem 'whenever'

Step 2: Generate schedule.rb file

$ cd /your-project

$ wheneverize .

Step 3: Add config to schedule.rb

every :day, at: '1:00 am' do
  command "backup perform --trigger your_backup"
end

Tổng kết

Bài viết là tổng kết từ nhiều nguồn, hy vọng mang lại kết quả cho mọi người (bow).

Tham khảo

http://backup.github.io/backup/v4/

http://vladigleba.com/blog/2014/06/30/backup-a-rails-database-with-the-backup-and-whenever-gems/

http://luanotes.com/posts/auto-backup-database-in-rails-application

0