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