Trước đây mình vẫn dùng VPS để chứa các bản backup sử dụng công cụ Duplicity hoặc Rsync. Tuy nhiên, hiện giờ đã có một phương pháp mới hiệu quả hơn, tiết kiệm hơn (Free), đó là sao lưu lên Cloud với Rclone.

backup-server-google-drive

Rclone là một công cụ đồng bộ hóa dữ liệu tương tự Rsync nhưng lại được tập trung phát triển chức năng kết nối với các dịch vụ lưu trữ đám mây.

Ưu điểm của việc sử dụng dịch vụ lưu trữ đám mây đó là tốc độ cao (do có server được đặt trên khắp thế giới), an toàn dữ liệu (không lo ngại các vấn đề phần cứng, network) và nhất là hầu hết đều Free. Mình đặc biệt thích những thứ Free!

Rclone hỗ trợ rất nhiều dịch vụ Cloud thông dụng như:

  • Google Drive
  • Amazon S3
  • Openstack Swift / Rackspace cloud files / Memset Memstore
  • Dropbox
  • Google Cloud Storage
  • Amazon Drive
  • Microsoft OneDrive
  • Hubic
  • Backblaze B2
  • Yandex Disk
  • SFTP
  • The local filesystem

Xem thêm test tốc độ upload Rclone.

Giờ thay vì backup đưa lên VPS khác để lưu trữ, mình chuyển sang sử dụng Google Drive, dung lượng miễn phí 15GB, mua thêm cũng khá rẻ, chỉ 45k/tháng là được 100GB rồi. Bạn nào có tài khoản Google Apps miễn phí nữa thì càng tuyệt vời.

Trong bài viết này sẽ có 2 phần chính, 1 là cài đặt Rclone trên VPS, 2 là sử dụng Rclone để upload backup lên Google Drive. Với những cloud service khác các bạn làm tương tự.

Việc tạo file backup toàn bộ dữ liệu VPS mình đã hướng dẫn chi tiết trong bài viết Hướng dẫn tự động sao lưu toàn bộ VPS, bài viết này sẽ chỉ tập trung vào việc cài đặt tự động upload file nén lên Google Drive. Xem thêm hướng dẫn sử dụng Rclone với Google Drive và các dịch vụ cloud khác tại Rclone Docs.

Kịch bản tự động backup như sau:

  • Sao lưu toàn bộ database MySQL, mỗi database một file .gz
  • Sao lưu toàn bộ code trong thư mục /home/domain.com/public_html/
  • Sao lưu toàn bộ cấu hình Nginx trong thư mục /etc/nginx/conf.d/
  • Tổng hợp tất cả dữ liệu vào 1 folder
  • Upload file backup lên Google Drive vào lúc 2h00 sáng
  • Tự động xóa file backup trên VPS sau khi upload xong, xóa file backup trên Cloud nếu quá 2 tuần

Giờ bắt đầu vào việc nhé.

I. Hướng dẫn cài đặt Rclone

1. Cài đặt Rclone

Rclone là một chương trình dòng lệnh nên mình sẽ down xuống rồi di chuyển file chạy đến thư mục /usr/sbin/ của VPS để sử dụng sau này.

Chú ý : Nếu bạn đã cài đặt phiên bản cũ, cũng chỉ cần chạy chuỗi lệnh dưới để update. Tham khảo Changelog các phiên bản.

– Cài đặt với phiên bản hệ điều hành Linux 64bit

cd /root/
wget http://downloads.rclone.org/rclone-v1.36-linux-amd64.zip
unzip rclone-v1.36-linux-amd64.zip
\cp rclone-v*-linux-amd64/rclone /usr/sbin/
rm -rf rclone-*

– Cài đặt với phiên bản hệ điều hành Linux 32bit

cd /root/
wget http://downloads.rclone.org/rclone-v1.36-linux-386.zip
unzip rclone-v1.36-linux-386.zip
\cp rclone-v*-linux-386/rclone /usr/sbin/
rm -rf rclone-*

Link download trực tiếp các phiên bản Rclone.

Giờ bạn có thể sử dụng lệnh rclone để xem thêm thông tin sử dụng.

2. Một số câu lệnh thông dụng

Các câu lệnh sử dụng Rclone thường có dạng như sau:

rclone command <parameters> <parameters...>

Trong đó command là câu lệnh, parameters là các tham số.

Một số lệnh thông dụng khi dùng Rclone:

  • rclone config – Cấu hình kết nối đến dịch vụ cloud.
  • rclone copy – Copy files từ server đến cloud, skip nếu đã tồn tại dữ liệu.
  • rclone sync – Synchronize giữa server và cloud, chỉ update dữ liệu trên cloud mà thôi.
  • rclone move – Move files từ server lên cloud.
  • rclone delete – Xóa dữ liệu của folder.
  • rclone purge – Xóa dữ liệu của folder và toàn bộ nội dung bên trong.
  • rclone mkdir – Tạo folder.
  • rclone rmdir – Xóa folder trống tại đường dẫn.
  • rclone rmdirs – Xóa toàn bộ folder trống tại đường dẫn.
  • rclone check – Kiểm tra dữ liệu server và cloud có đồng bộ hay không.
  • rclone ls – Liệt kê toàn bộ dữ liệu gồm size và path.
  • rclone lsd – Liệt kê toàn bộ thư mục.
  • rclone lsl – Liệt kê toàn bộ dữ liệu gồm modification time, size và path.
  • rclone size – Trả về kích thước thư mục.

Thông tin chi tiết từng lệnh bạn xem thêm ở đây.

II. Backup VPS lên Cloud với Rclone

1. Tạo kết nối với Google Drive

Đầu tiên chúng ta sẽ cấu hình kết nối Rclone với Google Drive, việc này chỉ phải làm 1 lần duy nhất. Kết nối được tạo tên remote

Kết nối SSH với VPS rồi chạy lệnh:

rclone config

Bạn sẽ nhận được thông báo: No remotes found - make a new one, nhập n rồi nhấn Enter để tạo kết nối mới.

Ở dòng name bạn nhập remote để đặt tên cho kết nối, bạn có thể chọn tên nào cũng được.

Một danh sách các dịch vụ cloud xuất hiện, hãy chọn số 7, Google Drive rồi nhấn Enter.

Ở 2 dòng tiếp theo client_idclient_secret, bạn hãy để trống nhấn Enter.

Khi được hỏi Use auto config? hãy nhập n rồi nhấn Enter. Ngay lập tức, Rclone sẽ đưa ra một đường link, bạn có thể click thẳng vào đó hoặc copy rồi paste vào trình duyệt.

tao-ket-noi-google-drive-2

Giao diện sẽ xuất hiện như sau:

cap-quyen-cho-rclone-truy-cap-google-drive

Nhấn nút Allow để đồng ý, sau đó bạn sẽ nhận được đoạn mã verification code như hình dưới:

ma-verification-code

Quay trở lại cửa sổ SSH, copy rồi paste code này vào dòng Enter verification code> rồi nhấn Enter.

Rclone cần xác nhận thông tin một lần nữa, bạn nhấn y để đồng ý rồi nhấn q để thoát khỏi giao diện cấu hình kết nối.

Toàn bộ quá trình cài đặt sẽ tương tự như sau:

No remotes found - make a new one
n) New remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
n/r/c/s/q> n
name> remote
Type of storage to configure.
Choose a number from below, or type in your own value
 1 / Amazon Drive
   \ "amazon cloud drive"
 2 / Amazon S3 (also Dreamhost, Ceph, Minio)
   \ "s3"
 3 / Backblaze B2
   \ "b2"
 4 / Dropbox
   \ "dropbox"
 5 / Encrypt/Decrypt a remote
   \ "crypt"
 6 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
 7 / Google Drive
   \ "drive"
 8 / Hubic
   \ "hubic"
 9 / Local Disk
   \ "local"
10 / Microsoft OneDrive
   \ "onedrive"
11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
12 / SSH/SFTP Connection
   \ "sftp"
13 / Yandex Disk
   \ "yandex"
Storage> 7
Google Application Client Id - leave blank normally.
client_id>
Google Application Client Secret - leave blank normally.
client_secret>
Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine or Y didn't work
y) Yes
n) No
y/n> n
If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth
Log in and authorize rclone for access
Enter verification code> x/xxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--------------------
[remote]
client_id =
client_secret =
token = {"access_token":"xxxx.xxxxx-xxxxxxxxxxxxxxx_xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","token_type":"Bearer","refresh_token":"1/xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxx","expiry":"2016-09-12T00:12:53.66619724-04:00"}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name Type
==== ====
remote drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

Đoạn nào bôi đỏ là cần nhập input

Vậy là xong, giờ bạn có thể test thử kết nối với lệnh: rclone lsd remote:

Nếu không có vấn đề gì sẽ có output tương tự như bên dưới:

test-thu-rclone

Tài khoản Google Drive này của mình mới tạo, chưa upload gì lên, chỉ có file mặc định Getting started.

2. Tạo kết nối với AmazonDrive/OneDrive/Yandex

Hiện nay, bên cạnh GG Drive, các Cloud khác cũng dần trở nên phổ biến và có nhiều ưu đãi cho người dùng. Việc tạo kết nối tới Amazon Drive/OneDrive/Yandex tương tự GG Drive, chỉ khác biệt bước lấy access_token.

Việc xác thực được thực hiện qua remote machine có trình duyệt (ví dụ máy tính của bạn) với lệnh rclone authorize "tên_cloud".

Mình chỉ ví dụ cụ thể OneDrive, đến bước xác thực:

Remote config
Use auto config?
 * Say Y if not sure
 * Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> n
For this to work, you will need rclone available on a machine that has a web browser available.
Execute the following on your machine:
        rclone authorize "onedrive"
Then paste the result below:
result>

Rclone yêu cầu chạy lệnh rclone authorize "onedrive" tại máy đang sử dụng để lấy access_token.

  1. Tải Rclone về máy cá nhân (bản cho Windows/OSX) tại Rclone Downloads. Cụ thể, Windows AMD64 – 64 Bit được file rclone-v1.36-windows-amd64.zip. Bên trong có file rclone.exe để chạy trên cửa sổ lệnh. Ví dụ đường dẫn file D:\Rclone/rclone.exe
  2.  Mở ứng dụng CMD của Windows (Run -> cmd) rồi chạy rclone authorize "onedrive" với đường dẫn file. Khi đó, lệnh sẽ tương tự D:\Rclone\rclone.exe authorize "onedrive"
  3. Browser bật ra yêu cầu bạn đăng nhập để xác thực. Thành công sẽ hiện thông báo Success. Go back to rclone to continue trên trình duyệt. Quay lại ứng dụng CMD bạn copy access_token để xác thực bên VPS.


Chú ý, khi copy access_token từ CMD bạn paste qua trình edit text (EmEditor/Notepad++) để loại bỏ hoàn toàn các kí tự thừa gây cách dòng. Khi đó, access_token chỉ là 1 chuỗi kí tự liền mạch duy nhất(dạng {"access_token":"..."expiry":"..."}).

3. Script backup toàn bộ VPS và upload lên Cloud

Trong bài Hướng dẫn tự động sao lưu toàn bộ VPS mình đã chia sẻ script tự động backup VPS, tuy nhiên trong bài này mình sẽ chỉnh sửa lại một chút, để script tự động upload lên Cloud sau khi tạo xong file nén.

Script hoạt động với Rclone phiên bản 1.35 trở lên. Kết nối Rclone với Cloud tên remote.

Script này mình viết theo cấu trúc folder trên server do HocVPS Script quản lý. Với những server khác, các bạn cần điều chỉnh lại một chút thì mới hoạt động được.

– Tạo file backup.sh ở thư mục /root/

nano /root/backup.sh

– Copy toàn bộ nội dung script bên dưới rồi paste vào (áp dụng với HocVPS Script 2.0 trở lên)

# HocVPS Script Plugin - Backup Server and Upload to Cloud

#!/bin/bash

SERVER_NAME=HOCVPS_BACKUP

TIMESTAMP=$(date +"%F")
BACKUP_DIR="/root/backup/$TIMESTAMP"
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
SECONDS=0

mkdir -p "$BACKUP_DIR/mysql"

echo "Starting Backup Database";
databases=`$MYSQL -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`

for db in $databases; do
	$MYSQLDUMP --force --opt --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done
echo "Finished";
echo '';

echo "Starting Backup Website";
# Loop through /home directory
for D in /home/*; do
	if [ -d "${D}" ]; then #If a directory
		domain=${D##*/} # Domain name
		echo "- "$domain;
		zip -r $BACKUP_DIR/$domain.zip /home/$domain/public_html/ -q -x /home/$domain/public_html/wp-content/cache/**\* #Exclude cache
	fi
done
echo "Finished";
echo '';

echo "Starting Backup Nginx Configuration";
cp -r /etc/nginx/conf.d/ $BACKUP_DIR/nginx/
echo "Finished";
echo '';

size=$(du -sh $BACKUP_DIR | awk '{ print $1}')

echo "Starting Uploading Backup";
/usr/sbin/rclone move $BACKUP_DIR "remote:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1
# Clean up
rm -rf $BACKUP_DIR
/usr/sbin/rclone -q --min-age 2w delete "remote:$SERVER_NAME" #Remove all backups older than 2 week
/usr/sbin/rclone -q --min-age 2w rmdirs "remote:$SERVER_NAME" #Remove all empty folders older than 2 week
echo "Finished";
echo '';

duration=$SECONDS
echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."

# HocVPS Script Plugin - Backup Server and Upload to Cloud

#!/bin/bash

. /etc/hocvps/scripts.conf

SERVER_NAME=HOCVPS_BACKUP

TIMESTAMP=$(date +"%F")
BACKUP_DIR="/root/backup/$TIMESTAMP"
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD=$mariadbpass
MYSQLDUMP=/usr/bin/mysqldump
SECONDS=0

mkdir -p "$BACKUP_DIR/mysql"

echo "Starting Backup Database";
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`

for db in $databases; do
	$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done
echo "Finished";
echo '';

echo "Starting Backup Website";
# Loop through /home directory
for D in /home/*; do
	if [ -d "${D}" ]; then #If a directory
		domain=${D##*/} # Domain name
		echo "- "$domain;
		zip -r $BACKUP_DIR/$domain.zip /home/$domain/public_html/ -q -x /home/$domain/public_html/wp-content/cache/**\* #Exclude cache
	fi
done
echo "Finished";
echo '';

echo "Starting Backup Nginx Configuration";
cp -r /etc/nginx/conf.d/ $BACKUP_DIR/nginx/
echo "Finished";
echo '';

size=$(du -sh $BACKUP_DIR | awk '{ print $1}')

echo "Starting Uploading Backup";
/usr/sbin/rclone move $BACKUP_DIR "remote:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1
# Clean up
rm -rf $BACKUP_DIR
/usr/sbin/rclone -q --min-age 2w delete "remote:$SERVER_NAME" #Remove all backups older than 2 week
/usr/sbin/rclone -q --min-age 2w rmdirs "remote:$SERVER_NAME" #Remove all empty folders older than 2 week
echo "Finished";
echo '';

duration=$SECONDS
echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."


Update 3/5/2017:
– Cập nhật lại script sử dụng với phiên bản HocVPS Script mới nhất 2.0.

Lưu ý:

  • Script trên sẽ back up toàn bộ database, mỗi database nén thành một file .gz, lưu trong thư mục mysql
  • Mỗi thư mục chứa website được nén lại thành 1 file .zip
  • Toàn bộ cấu hình Nginx của các website được lưu trong thư mục nginx
  • SERVER_NAME mặc định là HOCVPS_BACKUP, nếu muốn thay đổi folder trên Cloud bạn hãy thay đổi tham số này.
  • Muốn điều chỉnh thời gian xóa file backup, bạn sửa thông số ở dòng deletermdirs. Cụ thể, chuyển 2w thành xd (ngày) hoặc xw (tuần) tùy theo nhu cầu.

– Nhấn Ctrl+O, Enter để lưu và Ctrl+X để thoát.

– Phân quyền cho script

chmod +x /root/backup.sh

– Vậy là xong rồi đó, giờ bạn có thể test lại bằng cách chạy lệnh:

/root/backup.sh

Thử kiểm tra trên Cloud xem có thư mục mới với dữ liệu backup chưa nhé, hoặc test với lệnh rclone lsl remote:HOCVPS_BACKUP

Nếu không có vấn đề gì sẽ thấy kết quả trả về có một thư mục là ngày hiện tại, bên trong có chứa file nén website (.ZIP), cấu hình Nginx (.CONF) và database (.GZ).

4. Tạo cronjob tự động backup hàng ngày

Giờ mình sẽ cho script tự động chạy lúc 2h00 sáng.

EDITOR=nano crontab -e

Dán nội dung sau vào cửa sổ Terminal

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

Nhấn Ctrl+O, Enter để lưu và Ctrl+X để thoát

Vậy là xong, cứ 2h sáng hàng ngày script sẽ tự động chạy, backup toàn bộ dữ liệu của VPS rồi upload lên Cloud. Đồng thời, dữ liệu backup trên VPS sẽ được xóa luôn sau khi upload xong.

Xem thêm hướng dẫn sử dụng cronjob.

III. Tải file backup từ Cloud xuống VPS

Cách đơn giản nhất để bạn khôi phục lại dữ liệu đó là tải file backup từ Cloud xuống máy tính, rồi tùy theo nhu cầu mà up trở lại lên VPS.

Tuy nhiên, nếu muốn tải trực tiếp file backup về VPS, bạn có thể sử dụng luôn Rclone với câu lệnh copy.

Ví dụ tham khảo:

rclone copy "remote:/HOCVPS_BACKUP/2017-11-01" /root/

Lệnh trên sẽ copy folder 2017-11-01 trong thư mục HOCVPS_BACKUP trên Cloud về thư mục /root/ của VPS. Tốc độ upload và download từ Cloud đều rất nhanh.
Sau khi copy dữ liệu backup về VPS, bạn tiến hành giải nén file zip, copy thư mục web và nginx về đúng vị trí đồng thời tiến hành import database.

IV. Tổng kết

Công việc backup VPS/Server là việc vô cùng quan trọng, mình đã từng mất toàn bộ dữ liệu không khôi phục được do ấn nhầm Rebuild và chủ quan không backup. Hi vọng với bài hướng dẫn chi tiết này, các bạn sẽ có thêm phương pháp mới tiết kiệm và hiệu quả hơn.

Giờ đến lượt các bạn làm theo đó, cần hỗ trợ gì thêm hoặc góp ý gì cứ comment bên dưới nhé.

Comment của bạn

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

554 Comments

  1. Đạt phan 1 comment

    Em có thư mục cần backup vs dung lượng gần 15gb, vậy dùng script này để tự backup có ổn không anh @Luan,

    Chi sợ nặng quá lại bị timeout hay bị down giữa chừng 🙁

  2. Giang 12 comment

    Bác Luân ơi, dạo này em check thấy nó không tự backup nữa. Em có vào để làm thủ công thì nó báo là:
    Starting Compress Files
    zip I/O error: No space left on device
    zip error: Output file write failure (write error on zip file)
    ls: cannot access /root/backup/VPS-2016-12-21_10-22.zip: No such file or directory
    Finished

    Khắc phục ntn ạ?

    1. Giang 12 comment

      À do ổ cứng VPS của mình bị đầy do để 2 w nên nó dồn 2 tuần chưa xóa file. Mình đã xóa các file cũ và backup được bình thường rồi.

      1. Luân Trần Admin

        Ơ sao lạ nhỉ, script tự remove file trên server sau khi upload lên Drive mà. Sao lại full ổ cứng được nhỉ?

        1. Giang 12 comment

          Mình cũng không hiểu tại sao nó lại ứ đọng nhiều tới như vậy (gần 10 file backup). Sau 1 ngày auto tự động lại thì nó đã tự remove file rồi.

          1. Việt Phương Moderator

            Hiện tại update đã thêm rmdirs. Bạn sửa lại nội dung /root/backup.sh nhé.
            Ngoài ra bạn chạy lệnh thủ công /root/backup.sh vẫn không xóa à?

  3. Quốc Việt Phạm Ngọc 8 comment

    Thanks anh Luân vì một bài rất bổ ích, em đã áp dụng thành công cho 1 vps của em run hocvps script. Cơ mà em mạn phép hỏi, em còn 1 vps khác nữa, run vpssim, thì cái bước số 2. Script backup toàn bộ VPS và upload lên Google Drive mình cần điều chỉnh gì ạ ?
    Cảm ơn anh!

    1. Việt Phương Moderator

      bạn hãy thay thủ công các tham số MYSQL_USER, MYSQL_PASSWORD tương ứng với lại đường dẫn web cho phù hợp nhé
      Commend cả dòng 2 . /etc/hocvps/scripts.conf

  4. Bình Lâm 5 comment

    – VPS mình cài Hocvps-script, thực hiện theo bài hướng dẫn trên. Kết nối và upload GoogleDrive thành công. Nhưng check thì không thấy file MySQL – http://imgur.com/a/lHkeP

    – Không biết mình sai ở bước nào?

    1. Việt Phương Moderator

      Bạn chạy script backup #/root/backup.sh thì phần backup Database có thành công không: Starting Backup Database Finished
      Có thể do bạn đã thay đổi cấu hình MySQL nên các thông số user, đường dẫn, pass của MySQL đã thay đổi nên k connect đc

    1. Việt Phương Moderator

      Script tự bỏ qua các database mặc định của MySQL, thường chứa các từ khóa “Database|information_schema|performance_schema|mysql”
      Và database của bạn là mysql-tv

  5. Khoa 11 comment

    Starting Backup Website
    – admin

    zip error: Nothing to do! (/root/backup/2017-01-03/admin.zip)
    – backup

    zip error: Nothing to do! (/root/backup/2017-01-03/backup.zip)
    Em bị lỗi này, anh Luân xử lý giúp em với ?

    1. Việt Phương Moderator

      Hệ thống bạn chạy HocVPS script hay gì khác? Nếu hệ thống khác thì bạn cần cấu hình lại đường dẫn thư mục website nhé. Do mình thấy script đang back up 2 website ở thư mục home của bạn là adminbackup

      1. khoa 11 comment

        anh chỉ giúp em đc ko? em đang sử dụng trình vesta có cấu trúc web như sau: /home/manhkhoa/web/svbinhduong.org/public_html, thì em phải sửa ở những đoạn nào ạ ?

        1. Việt Phương Moderator

          Đoạn Starting Backup Website trong script. Bạn thử xem được với website bạn không

          echo "Starting Backup Website";
          #Loop through /home directory
          for D in /home/*/web/*; do
          	if [ -d "${D}" ]; then #If a directory
          		domain=${D##*/} # Domain name
          		echo "- "$domain;
          		zip -r $BACKUP_DIR/$domain.zip /home/*/web/$domain/public_html/ -q -x /home/*/web/$domain/public_html/wp-content/cache/**\* #Exclude cache
          	fi
          done
          echo "Finished";
          echo '';
          
  6. khoa 11 comment

    em đã xóa bỏ dòng : . /etc/hocvps/scripts.conf , đã sửa lại database name và passworld thủ công. đã sửa lại cấu trúc đường dẫn /home/manhkhoa/web/$domain/public_html mà vẫn không đc ?

  7. Trọng Kỳ 16 comment

    Ở câu lệnh /usr/sbin/rclone -q –min-age 2w delete “remote:$SERVER_NAME”
    thì nó chỉ xóa các file bên trong thư mục thôi, tên thư mục cũ hơn 2w vẫn còn nguyên. Mình đọc hướng dẫn của nó thì cái filter –min-age không áp dụng được cho lệnh purge. Vậy có cách nào để xóa luôn cả file và tên thư mục đó không nhỉ, bây giờ vẫn phải xóa thư mục thủ công 🙂

    1. Việt Phương Moderator

      Bạn sửa delete thành purge. Tuy vậy, purge "remote:$SERVER_NAME" sẽ xóa cả thư mục tổng HOCVPS_BACKUP

      1. Trọng Kỳ 16 comment

        Lệnh purge hôm nọ mình thử rồi. Mất hết nên không dùng được. Tạm thời vẫn phải xoá thư mục thủ công.

        1. Việt Phương Moderator

          Bạn sửa thành xóa remote:$SERVER_NAME/** ý.
          Cụ thể:

          /usr/sbin/rclone -q --min-age 2w delete "remote:$SERVER_NAME/**" #Remove all backups older than 2 week
          1. Trọng Kỳ 16 comment

            Câu lệnh này thì báo lỗi 🙁
            2017/01/12 19:28:47 directory not found

        2. Việt Phương Moderator

          Đã nghiên cứu xong cả topic về manage directory:
          _purge sẽ xóa cả directory nên không được khuyến cáo dùng.
          _Dùng kết hợp deletermdir thì rmdir sẽ chỉ xóa empty folder, không phù hợp vì bên trong các folder ngày có folder mysql và nginx.
          –> Sử dụng rmdirs Remove any empty directoryies under the path
          Bạn cần update lên Rclone 1.35 để có thêm rmdirs. Rclone là một chương trình dòng lệnh nên chỉ cần down file xuống rồi di chuyển file chạy đến thư mục /usr/sbin/ của VPS để sử dụng. Link tải: Rclone 1.35 64bit
          Khi đó phần delete trong Backup.sh sẽ như sau:

          /usr/sbin/rclone -q --min-age 2w delete "remote:$SERVER_NAME"
          /usr/sbin/rclone -q --min-age 2w rmdirs "remote:$SERVER_NAME" #Remove all backups older than 2 week
          
          1. Trọng Kỳ 16 comment

            Đã thử câu lệnh và hoạt động tốt rồi. Cám ơn bạn. Câu lệnh này nên được thêm vào script trong bài hướng dẫn này ^^

  8. Trọng Kỳ 16 comment

    khi đang kết nối vào ssh mà chạy file /root/backup.sh thì vẫn hoạt động tốt. Nhưng nếu cho nó vào crontab thì bị lỗi không upload được. Mail thông báo về lỗi:
    Starting Uploading Backup
    2017/01/08 21:07:11 Failed to create file system for “remote:DATA”: didn’t find section in config file
    Finished
    Vào /var/log/rclone.log thì thấy báo lỗi
    Config file “/.rclone.conf” not found – using defaults
    2017/01/08 21:07:11 Failed to create file system for “remote:DATA”: didn’t find section in config file
    Vậy là mình phải copy thêm một file .rclone.conf vào thư mục gốc của server thì crontab mới chạy được.
    Cũng không hiểu tại sao lại bị vậy nữa. Đã thử trên 2 server đều bị giống nhau.

    1. Việt Phương Moderator

      Lạ nhỉ. Mình không gặp lỗi này. Còn failed to create file system là do chưa tạo kết nối đến Cloud nào đó tên remote:. Nhưng nếu bạn chạy # root/backup.sh bình thường tức là # rclone config đã tạo remote: rồi chứ nhỉ

      1. Trọng Kỳ 16 comment

        Có thể minh dùng centminmod nên cấu hình nó khác gì đó cũng nên. Bạn copy file crontab của bạn mình xem với.

  9. Fususu 30 comment

    Có bác nào gặp lỗi như em không, chạy thử thì báo

    2017/01/09 16:38:03 Time may be set wrong – time from “www.googleapis.com” is -6h59m59.742541671s different from this computer

  10. Luân Trần Admin

    Mình mới update lại script back up nhé, đã note lại kĩ trong bài viết rồi mời các bạn tham khảo thêm.

  11. khanh nguyen 10 comment

    em bị lỗi này khi chạy /root/backup.sh, anh giúp e với:

    : command not foundne 2:
    : command not foundne 4:
    : No such file or directorytc/hocvps/scripts.conf
    : command not foundne 6:
    : command not foundne 8:
    : command not foundne 16:
    : command not foundne 18:
    Starting Backup Database
    : command not foundne 19:
    : No such file or directoryusr/bin/mysql
    : command not foundne 21:
    ‘root/backup.sh: line 22: syntax error near unexpected token `do
    ‘root/backup.sh: line 22: `for db in $databases; do

    1. Việt Phương Moderator

      Script cho hệ thống cài HocVPS Script. Bạn chạy hệ thống gì vậy?

          1. khanh nguyen 10 comment

            ok. thank anh. em gửi rồi đó ạ. check giúp e với

          2. Việt Phương Moderator

            Bạn cần convert file sang định dạng UNIX thì sau đó dùng # /root/backup.sh bình thường.
            Mình cài dos2unix cho bạn rồi đó:

            # yum install dos2unix
            # dos2unix /root/backup.sh

            Bạn kiểm tra trên drive có Backup chưa?

  12. Bạc Đỏ 56 comment

    Mình muốn định dạng database backup ở dạng .sql.gz thì sửa đoạn code $MYSQLDUMP –force –opt –user=$MYSQL_USER -p$MYSQL_PASSWORD –databases $db | gzip > “$BACKUP_DIR/mysql/$db.gz” như thế nào nhỉ

  13. Buithang 4 comment

    Khi mình paste token vào thì gặp lỗi nay: Failed to save new token in config file: section ‘remote’ not found .
    Admin có thể giúp mình được ko

    1. Việt Phương Moderator

      Bạn chạy lại thử xem. Hình như bạn change token vào cho config đã tạo từ trước à

  14. Bạc Đỏ 56 comment

    Ko hiểu sao rclone ko tự động backup toàn bộ vps lên google drive cho mình nữa. VPS disc & google drive vẫn còn trống rất nhiều. Toàn bộ server của mình ~ 500MB

    Tưởng vps bị lỗi gì, mình đã cài lại nhưng vẫn không được.

    Admin giúp mình xem bị lỗi gì với

    1. Việt Phương Moderator

      Bạn thử các lệnh sau kết quả ntn:rclone lsd remote:/root/backup.sh

      1. Bạc Đỏ 56 comment

        1. /root/backup.sh thì cho kết quả sau:
        /root/backup.sh: line 5: /etc/hocvps/scripts.conf: No such file or directory
        Starting Backup Database
        Finished

        Starting Backup Website
        – 0-VPS-SHORTCUT

        zip error: Nothing to do! (/root/backup/2017-02-02/0-VPS-SHORTCUT.zip)
        – domain1.com
        – domain2.demo
        Finished

        Starting Backup Nginx Configuration
        Finished

        Starting Uploading Backup
        Finished

        Total 366M, 0 minutes and 59 seconds elapsed.

        2. rclone lsd remote: cho kết quả

        -1 2017-01-13 02:57:04 -1 folder1
        -1 2017-01-11 03:40:20 -1 folder2
        -1 2016-10-31 09:23:05 -1 folder3

          1. Bạc Đỏ 56 comment

            Cụ thể là gửi file nào bạn nhỉ. Mà bây giờ nó upload thành folder ko phải file gzip theo từng ngày

          2. Việt Phương Moderator

            Thì vẫn là folder mà bạn. Upload thành công rồi à bạn?
            HOCVPS_BACKUP > Folder ngày > Website nén thành gzip và 2 folder MySQL và Nginx

          3. Bạc Đỏ 56 comment

            Vẫn chưa chạy bạn ơi.

            Có lẽ lỗi ở chỗ cronjob ko chạy.

            File cronjob được đặt trong folder tmp phải ko nhỉ. Nếu đúng thì không thấy file đấy đâu cả. Lúc mình chạy lại lệnh EDITOR=nano crontab -e rồi save thì nó báo installing new crontab và file: /tmp/crontab.8bk15f

            Trước đây đoạn script lưu toàn bộ vps thành file zip, chứ không phải từng folder riêng như sau khi được sửa

          4. Việt Phương Moderator

            Uhm, hiện tại là thành folder riêng của mysql, nginx và website. Bạn chạy lệnh thủ công mà được thì do crontab rồi

          5. Việt Phương Moderator

            crontab -l ra kết quả gì bạn? Bạn thêm log file để biết crontab chạy được không
            Sửa dòng ý thành : 0 2 * * * /root/backup.sh > /var/log/backup.log

          6. Bạc Đỏ 56 comment

            hix ko thấy file backup.log được tạo bạn ạ :((

      2. Bạc Đỏ 56 comment

        Mình đag để test là 16h, khi chạy lệnh crontab -l kết quả như sau:
        0 16 * * * /root/backup.sh > /dev/null 2>&1

        1. Việt Phương Moderator

          Có mà bạn. Log của backup.sh sẽ lưu tại backup.log. Mình test VPS mình vãn bình thường. Bỏ đoạn /dev/null 2>&1 đi

  15. KenIT 7 comment

    Cho mình hỏi xíu:
    zip I/O error: No space left on device
    zip error: Output file write failure (write error on zip file)
    ls: cannot access /root/backup/VPS-2017-02-07_06-19.zip: No such file or directory
    Mình bị lỗi này là sao nhỉ, trước giờ vẫn chạy ok, nay check lại thử xem thì lại bị lỗi nãy
    Mong admin hỗ trợ với ạ

    1. Việt Phương Moderator

      Hình như VPS bạn không còn đủ bộ nhớ để tạo file backup. Kết quả của # df bên bạn là gì

      1. KenIT 7 comment

        Cảm ơn Admin, cho mình hỏi xíu, giờ mình nâng cấp lên 1.35 thì chỉ cần cài đặt lại phần rclone thôi, có cần phải kết nối lại google drive không?
        Cảm ơn ạ

        1. Việt Phương Moderator

          Bạn xóa Rclone cũ trong /usr/sbin/ rồi cài lại từ đầu nhé. Cũng nhanh mà vì chỉ cần copy vào thư mục

  16. Đỗ Trí 9 comment

    A Luân ơi cho em hỏi em dùng VPS vultr nhưng giờ muốn chuyển sang DO thì mình đem phài backkup qua khôi phục chạy tiếp tục được không anh ? tại vps chạy 3 website backup thì hơi mất thời gian quá 🙁

    1. Việt Phương Moderator

      Bạn phải backup lại website đó, bản chất Rclone không phải như bạn ghost win, backup restort trong 1 nốt nhạc đâu 🙂
      Do VPS khác nhà cung cấp nên cũng không thể chuyển snapshot từ Vultr sang DO.
      Bạn up website lên > Import database > Move Nginx Conf đúng vị trí

  17. Nguyễn Đức Tài 9 comment

    Chào anh Luân. Em làm theo các bước trên tới lúc test backup thì nó báo là không tìm thấy thư mục em tạo luôn thư mục trên drive thì nó bào thành công mà trên drive không thấy gì với lại nó xóa luôn cái thư mục em tạo lúc nãy. Giúp em với

    1. Việt Phương Moderator

      Kết quả chạy như thế nào bạn? Và script backup chỉ backup thư mục website theo cấu trúc của HocVPs Script thôi
      Cụ thể là /home/domain/public_html

      1. Nguyễn Đức Tài 9 comment

        Cám ơn bạn nhé. Mình làm được rồi tại mình đổi tên hostname phải thay tới 4 dòng còn sót 1 dòng nên nó dẫn đến lổi :))

  18. Nguyễn Hùng 6 comment

    E muốn nó tự động backup vào lúc 2h sáng ngày chủ nhật hàng tuần thì chạy lệnh: 0 2 * * 0 /root/backup.sh > /dev/null 2>&1 đúng không a? Tks

    1. Việt Phương Moderator

      Trong script có update câu lệnh xóa toàn bộ dữ liệu trên server sau khi upload xong đó bạn # rm -rf $BACKUP_DIR