0

Auto backup database in Rails app

Chao, (Tiếng Ý 😃))) Các bạn đã bao giờ nghĩ ra trường hợp khi bild dự án mà không có một bản sao lưu Database nào chưa? Chuyện đó sẽ thật nguy hiểm vì chúng ta hoàn toàn có khả năng gặp mất trắng dữ liệu nếu vô tình gặp phải một "vấn đề tâm linh" nào đó 😦 😦 Trước đây mình cũng đã từng bị mất dữ liệu db như vậy, và sau này mình đã tìm đến gem backup để giải quyết vấn đề này. Gem backup trong rails sẽ giúp chúng ta tạo ra được những bản sao lưu dữ liệu và thiết kế một cách tự động và định kì. Nó sẽ làm tốn thêm một ít dung lượng nữa cho dự án của bạn, nhưng nó lại tiết kiệm được cho bạn quá nhiều thời gian để "yêu lại từ đầu" những thiết kế và hệ thống dữ liệu bị mất mát nếu như chẳng may điều đó xảy ra mà bạn không dùng đến Gem 😉 Chúng ta cùng đi vào nhanh config và cách sử dụng Gem backup

I. Cài đặt

Chúng ta sẽ không thêm Gem backup vào Gemfile như những Gem thông thường khác, thay vào đó, ta chạy trực tiếp lệnh cài đặt sau: gem install backup

II. Một số công nghệ mà backup đang hổ trợ

1. Database

    `MySQL
    PostgreSQL
    MongoDB
    Redis
    Riak SQLite`

2. Storages

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

3. Compressors and Encryptors

    `Gzip
    Bzip2
    OpenSSL
    GPG`

Ví dụ, chúng ta sẽ generate ra một bản backup model với các opption sau đây PostgreSQL database

    Store in S3

    Compressor: Gzip format

    Send email to notify after backup process finished.

Ta có dòng lệnh $ 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`

Chỉ những thao tác cơ bản đó thôi là mình đã có thể có được một bản sao dữ liệu đầy đủ rồi, nếu muốn làm nó tự động, bạn có thể kết hợp backup với whenever Trong bài viết tiếp theo, mình sẽ giới thiệu tiếp với các bạn thao tác này. Còn bây giờ thì, xin chào và hẹn gặp lại 😄 😄 😄


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí