CHIA SẺ:

Việc sao lưu dữ liệu website là việc thường phải làm với các webmaster. Khi bạn sử dụng shared hosting thì việc backup đã được các hosting provider tự động thực hiện, tuy nhiên với VPS thì khác. Bạn sẽ phải tự thực hiện backup bằng tay. Trong bài viết này mình sẽ hướng dẫn các bạn thực hiện quá trình tự động sao lưu toàn bộ dữ liệu của VPS thông qua Duplicity.

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://canhme.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ụng Ramnode, 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

  1. Sử dụng mysqldump để sao lưu database
  2. Dùng zip nén toàn bộ file lại
  3. 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 root@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 root@12.34.56.78

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 --volsize 100 --ssh-options="-oProtocol=2 -oIdentityFile=/root/.ssh/backup_rsa" /var/backups/2014-03-23/ scp://root@12.34.56.78//var/backups/chiasecoupon.com/2014-03-23/

Ở đây mình chọn chế độ backup full chứ không phải incremental. Và tự động split file 100MB nếu dung lượng quá lớn.

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 Report\nfrom:admin@chiasecoupon.com\n\n"
    rm -rf /var/backups/*
    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 --volsize 100 --ssh-options="-oProtocol=2 -oIdentityFile=/root/.ssh/backup_rsa" /var/backups/$(date +"%Y-%m-%d")/ scp://root@12.34.56.78//var/backups/chiasecoupon.com/$(date +"%Y-%m-%d")/
} | /usr/sbin/sendmail "admin@chiasecoupon.com"

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. Ở đây mình quen sử dụng editor nano nên sẽ sử dụng thay cho vim mặc định.

EDITOR=nano crontab -e

Thêm dòng mới với nội dung:

0 3 * * * /root/backup.sh >/dev/null 2>&1

Đoạn bên trên qui định cứ 3h sáng mỗi ngày sẽ thực hiện backup 1 lần, nếu bạn muốn thay đổi thời gian thì tham khảo thêm bài viết về crontab.

Cuối cùng nhấn Ctrl + O để lưu lại và Ctrl + X để thoát.

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.

Chúc các bạn thực hiện thành công!

102 Comments

    1. Trung 5

      Chào bạn,

      Bạn đã sửa được lỗi này chưa
      Mình cũng bị giống bạn 🙁
      Đã login được vào vps khác bằng rsa key, nhưng lúc thử dùng duplicity để gửi backup file thì lại bị lỗi giống bạn 🙁

  1. Nhan Nguyen 6

    Nếu có nhiều website trên nhiều VPS thì có thể backup qua duy nhất 1 con vps backup được không vậy bạn?

  2. Phan Phiêu 7

    Các bạn nào biết giới thiệu mình con VPS nào rẻ rẻ để mình backup cái nhỉ!?
    Thanks!

  3. V 1

    Luân ơi cho mình hỏi 1 xíu về back up này.
    Chắc L cũng biết trên Vultr khi dùng window đó, cụ thể ở đây là win 2008 server, sau khi đã chạy isosetup xong, cài đặt đầy đủ các phần mềm rồi, thì họ dùng snapshot có trong vultr để tạo bản sao, sau đó dùng ngay trên account vultr của họ. Câu hỏi mình muốn hỏi ở đây là: có thể dùng back up, hay snapshot của vultr để tạo ra 1 bản sao win 2008 đã cài đặt đầy đủ phần mềm, sau đó lưu trữ ở 1 server nào khác(vd google drive) giống như mình tạo bản ghost ấy, sau đó mình reg nhiều account vultr, rồi thay vì upload iso trắng, mình upload bản ghost đã cài full soft lên, vậy có được không luân? Và bằng cách nào ạ? Xin cảm ơn!

    1. Luân Trần Admin

      Mình không sử dụng server Windows thường xuyên nên vụ này rất tiếc không trả lời bạn được rồi. Tuy nhiên bạn có thể thử trực tiếp xem sao, không được thì xóa VPS đi, không tốn kém mấy.

  4. Hanh Pham 24

    Luân ơi hiện giờ xài vps backup ở đâu thì tốt vậy và giá rẻ vậy?
    Mình có xem ở ramnode thấy gói 128M ram giá tốt nhưng mà dung lượng có 12G ít quá trong khi nhu cầu mình dùng nhiều hơn.

    1. Luân Trần Admin

      Hiện giờ ngon nhất là Google Drive, free mà được 15GB. Đợi mình sắp tới bổ sung bài hướng dẫn chi tiết cho.

      1. Hanh Pham 24

        Mong Luân sớm ra bài để mình vọc theo với.
        Hiện mình đang bị động trong việc backup quá.
        Mà ngoài ramnode ra thì còn bên nào dùng làm vps backup tốt ko Luân?
        Cảm ơn Luân

  5. Duong 1

    Hi, Anh Luân.

    Mình đã làm theo cách của Anh nhưng chỉ copy được thư mục, không copy được file zip từ client lên server. Mình đã thử chạy trực lệnh duplicity thư mục cụ thể vẫn không ăn thua, kết quả show như thể này StartTime 1476351776.99 (Thu Oct 13 16:42:56 2016)
    EndTime 1476351777.24 (Thu Oct 13 16:42:57 2016)
    ElapsedTime 0.25 (0.25 seconds)
    SourceFiles 2
    SourceFileSize 2448768 (2.34 MB)
    NewFiles 2
    NewFileSize 2448768 (2.34 MB)
    DeletedFiles 0
    ChangedFiles 0
    ChangedFileSize 0 (0 bytes)
    ChangedDeltaSize 0 (0 bytes)
    DeltaEntries 2
    RawDeltaSize 2444672 (2.33 MB)
    TotalDestinationSizeChange 2375642 (2.27 MB)
    Errors 0.

    Xin chỉ giúp. Cảm ơn

  6. Hoang 8

    Anh Luân ơi, cho em hỏi VPS em thuê bên Vultru chỉ còn có 200M sử dụng hết 19G rồi,
    Giới hạn là 20G,
    Anh cho em hỏi giờ em muốn backup lại web thì phải làm thế nào ạ?

    1. Việt Phương Moderator

      Nếu backup thì dữ liệu trống còn phải hơn 1 nửa mới ổn định được bạn nhé

Comment của bạn

Your email address will not be published. Required fields are marked *