Nếu bạn là một nhà quản trị website chắc hẳn bạn đã rất thân thuộc với công việc backup dữ liệu hàng tuần để đảm bảo dữ liệu được bảo toàn và bảo mật. Việc backup dữ liệu trên WP có thể thực hiện tự động hóa, tuy nhiên trên VPS thì điều này lại trở nên khó khăn hơn, và đa số mọi người phải thực hiện bằng tay
Sau đây mình sẽ hướng dẫn các bạn cách tự động sao lưu toàn bộ dữ liệu của VPS thông qua Duplicity
1. Duplicity là gì ?
Duplicity là một công cụ hữu ích để có thể thực hiện remoted backup tự động. Một số ưu điểm của duplicity như:
- Có chế độ Incremental backups (chỉ backup những file mới so với lần trước đó)
- Có nhiều chế độ lưu trữ (SSH, rsync, FTP, Amazon S3, IMAP, Google Drive…)
- Tích hợp chức năng mã hóa.
- Dễ dàng cài đặt và sử dụng.
Trong bài viết này mình sẽ hướng dẫn các bạn backup web http://chiasecoupon.com chạy trên VPS CentOS của Cloudzin và lưu trên một VPS khác chuyên chứa dữ liệu (mình sử dụngRamnode, chỉ cần 128MB RAM (14.48$/năm) là đủ) thông qua ssh, những cái khác các bạn có thể tìm hiểu trên mạng.
Quá trình backup được thực hiện từ động mỗi ngày 1 lần vào 24h đêm.
Cấu trúc dữ liệu
– Toàn bộ dữ liệu được nén và lưu theo ngày trong thư mục /var/backups/. Điều này đảm bảo tốc độ tối ưu nhất và dễ dàng quản lý. Ví dụ:
- /var/backups/2014-03-23/
- db_2014-03-23.sql.gz
- files_2014-03-23.zip
- …
– Trên backup VPS cũng lưu theo ngày trong thư mục /var/backups/domain/. Ví dụ:
- /var/backups/chiasecoupon.com/2014-03-23/
- db_2014-03-23.sql.gz
- files_2014-03-23.zip
- …
Các bạn có thể tự sắp xếp dữ liệu phù hợp với nhu cầu bản thân và add thêm domain tùy ý.
Quy trình tự động sao lưu
- Sử dụng mysqldump để sao lưu database
- Dùng zip nén toàn bộ file lại
- Duplicity chuyển dữ liệu lên backup VPS
Chuẩn bị
– Tạo folder backup trên server và folder ngày hiện tại (mục đích để test, sau này quá trình tự động):
mkdir /var/backups/ mkdir /var/backups/2014-03-23/
– Tạo folder lưu trữ dữ liệu trên backup VPS
mkdir /var/backups/ mkdir /var/backups/chiasecoupon.com/ mkdir /var/backups/chiasecoupon.com/2014-03-23/
Giờ thì hãy tiến hành theo các bước sau, chú ý trong các lệnh mình hard code folder là /2014-03-23/để các bạn dễ dàng thực hiện theo. Ở bash script cuối cùng thì folder sẽ tự động được tạo theo như thời gian hiện tại của VPS.
Cài đặt duplicity
Sử dụng lệnh sau:
sudo yum install duplicity
Sao lưu MySQL
Sử dụng mysqldump:
mysqldump --single-transaction --routines --triggers --add-drop-table --extended-insert -u TaiKhoan -pMatKhauCuaBan Database | gzip -9 > /var/backups/2014-03-23/db_2014-03-23.sql.gz
Xem thêm Backup và Restore MySQL Database bằng dòng lệnh
Zip dữ liệu
zip -r /var/backups/2014-03-23/files_2014-03-23.zip /home/chiasecoupon.com/public_html/ -q -x /home/chiasecoupon.com/public_html/wp-content/cache/***
Trong ví dụ trên mình không nén folder cache, nếu các bạn không muốn thì có thể bỏ đoạn -x /home/chiasecoupon.com/public_html/wp-content/cache/***
đi.
Chú ý chỉnh lại đường dẫn chứa website của bạn cho phù hợp.
Nếu như báo lỗi -bash: zip: command not found
thì bạn cần chạy yum install zip
trước.
Duplicity
Ở đây mình dùng một VPS bảo mật chỉ chuyên chứa dữ liệu thôi, duplicity sẽ dùng ssh để gửi lên. Nếu các bạn muốn dùng Amazon S3 hoặc Google Drive thì hãy tìm hiểu trên mạng nhé, cấu trúc dòng lệnh cũng tương tự.
Đầu tiên cần tạo ssh key để kết nối với ssh-keygen
ssh-keygen -C 'Duplicity Backup Key' Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/backup_rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/backup_rsa. Your public key has been saved in /root/.ssh/backup_rsa.pub.
Chú ý bước này bạn không điền passphrase nhé, để trống.
Giờ sẽ tiến hành copy key này lên backup VPS.
ssh-copy-id -i /root/.ssh/backup_rsa.pub "-p 22 12.34.56.78"
Và test lại xem bạn có thể login với key này hay không
ssh -i /root/.ssh/backup_rsa -p 22 [email protected]
Nếu kết nối thành công, chạy exit
để thoát khỏi backup VPS và tiếp tục cài đặt.
duplicity full --no-encryption --ssh-options="-oProtocol=2 -oIdentityFile=/root/.ssh/backup_rsa" /var/backups/2014-03-23/ scp://[email protected]//var/backups/chiasecoupon.com/2014-03-23/
Ở đây mình chọn chế độ backup full chứ không phải incremental.
Nếu bạn muốn add thêm folder, hãy sử dụng option --include="/path/to/folder"
Nếu toàn bộ quá trình trên bạn thực hiện thành công, giờ hãy gộp tất cả lại vào 1 file bash script và chạy cronjob hàng ngày.
Tạo file script nano /root/backup.sh
với nội dung như bên dưới của mình:
#!/bin/bash { printf "subject:Chia Se Coupon Backup Reportnfrom:[email protected]" mkdir /var/backups/$(date +"%Y-%m-%d")/ echo "Starting backup database..." mysqldump --single-transaction --routines --triggers --add-drop-table --extended-insert -u TaiKhoan -pMatKhauCuaBan Database | gzip -9 > /var/backups/$(date +"%Y-%m-%d")/db_$(date +"%H:%M_%d-%m-%Y").sql.gz echo "Starting backup files..." zip -r /var/backups/$(date +"%Y-%m-%d")/files_$(date +"%H:%M_%d-%m-%Y").zip /home/chiasecoupon.com/public_html/ -q -x /home/chiasecoupon.com/public_html/wp-content/cache/*** echo "Starting duplicity..." duplicity full --no-encryption --ssh-options="-oProtocol=2 -oIdentityFile=/root/.ssh/backup_rsa" /var/backups/$(date +"%Y-%m-%d")/ scp://[email protected]//var/backups/chiasecoupon.com/$(date +"%Y-%m-%d")/ } | /usr/sbin/sendmail "[email protected]"
Như các bạn thấy trong script trên, mình có add thêm lệnh gửi thông báo qua email sau khi chạy backup thành công.
Sau đó lưu file này lại, thêm quyền executive chmod +x /root/backup.sh
, test một lần nữa xem toàn bộ quá trình sao lưu này thành công hay chưa với lệnh /root/backup.sh
Cronjob
Mình sẽ để tác vụ backup tự động thực hiện mỗi ngày bằng cách add thêm vào crontab.
crontab -e
Nhấn o
để thêm dòng mới với nội dung:
0 0 * * * /root/backup.sh >/dev/null 2>&1
Để lưu lại và thoát bạn nhấn ESC, rồi gõ vào :wq
nhấn Enter.
Như vậy là toàn bộ quá trình sao lưu dữ liệu lên backup VPS server đã được thực hiện tự động.
Lưu ý: có thể bạn cần thay đổi lại timezone thì cronjob mới hoạt động chính xác được.
Restore
Giờ thì chúng ta đã có những bản backup hàng ngày rồi, tuy nhiên làm thế nào để khôi phục lại website khi có vấn đề?
Đầu tiên bạn cần truy cập vào backup VPS server, đến thư mục chứa file backup sẽ thấy rất nhiều file kiểu như sau:
duplicity-full-signatures.20140322T142037Z.sigtar.gz duplicity-full.20140322T142037Z.manifest duplicity-full.20140322T142037Z.vol1.difftar.gz duplicity-full.20140322T142037Z.vol2.difftar.gz duplicity-full.20140322T142037Z.vol3.difftar.gz
Đó là cấu trúc dữ liệu của duplicity, để khôi phục lại như file nén db và files như ban đầu, hãy sử dụng lệnh:
duplicity restore --no-encryption --file-to-restore / file:///var/backups/chiasecoupon.com/2014-03-23 /var/backups/chiasecoupon.com/extract Synchronizing remote metadata to local cache... Copying duplicity-full-signatures.20140322T142037Z.sigtar.gz to local cache. Copying duplicity-full.20140322T142037Z.manifest to local cache. Last full backup date: Sat Mar 22 21:20:37 2014 GnuPG passphrase:
Truy cập vào folder /var/backups/chiasecoupon.com/extract
bạn sẽ thấy toàn bộ dữ liệu đã được giải nén.
Kết luận : Việc backup dữ liệu thường xuyên là việc các bạn nên và cần làm ngay bây giờ nếu như bạn chưa hề backup lần nào, tránh trường hợp đáng tiếc có thể xảy ra với dữ liệu của bạn
Chúc các bạn thực hiện thành công!