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 bản mới nhất với hệ điều hành Linux 64bit

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

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

cd /root/
wget https://downloads.rclone.org/rclone-current-linux-386.zip
unzip rclone-current-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. Bộ đếm thời gian bao gồm:
    • ms – Milliseconds
    • s – Seconds
    • m – Minutes
    • h – Hours
    • d – Days
    • w – Weeks
    • M – Months
    • y – Years
  • 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ố 11, 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.

Mục Scope that rclone should use when requesting access from drive chọn 1 – drive

Tiếp theo, để trống với ID of the root folderService Account Credentials JSON file path

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.

Chọn n tức no đối với Configure this as a team drive?

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 (bôi đỏ là cần nhập input):

rclone config
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> remote
Type of storage to configure.
Choose a number from below, or type in your own value
 1 / Alias for a existing remote
   \ "alias"
 2 / Amazon Drive
   \ "amazon cloud drive"
 3 / Amazon S3 Compliant Storage Providers (AWS, Ceph, Dreamhost, IBM COS, Minio)
   \ "s3"
 4 / Backblaze B2
   \ "b2"
 5 / Box
   \ "box"
 6 / Cache a remote
   \ "cache"
 7 / Dropbox
   \ "dropbox"
 8 / Encrypt/Decrypt a remote
   \ "crypt"
 9 / FTP Connection
   \ "ftp"
10 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
11 / Google Drive
   \ "drive"
12 / Hubic
   \ "hubic"
13 / Local Disk
   \ "local"
14 / Mega
   \ "mega"
15 / Microsoft Azure Blob Storage
   \ "azureblob"
16 / Microsoft OneDrive
   \ "onedrive"
17 / OpenDrive
   \ "opendrive"
18 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
19 / Pcloud
   \ "pcloud"
20 / QingCloud Object Storage
   \ "qingstor"
21 / SSH/SFTP Connection
   \ "sftp"
22 / Webdav
   \ "webdav"
23 / Yandex Disk
   \ "yandex"
24 / http Connection
   \ "http"
Storage> 11
Google Application Client Id - leave blank normally.
client_id>
Google Application Client Secret - leave blank normally.
client_secret>
Scope that rclone should use when requesting access from drive.
Choose a number from below, or type in your own value
 1 / Full access all files, excluding Application Data Folder.
   \ "drive"
 2 / Read-only access to file metadata and file contents.
   \ "drive.readonly"
   / Access to files created by rclone only.
 3 | These are visible in the drive website.
   | File authorization is revoked when the user deauthorizes the app.
   \ "drive.file"
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
   \ "drive.appfolder"
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
   \ "drive.metadata.readonly"
scope> 1
ID of the root folder - leave blank normally.  Fill in to access "Computers" folders. (see docs).
root_folder_id>
Service Account Credentials JSON file path  - leave blank normally.
Needed only if you want use SA instead of interactive login.
service_account_file>
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?access_type=offlinexxxx
Log in and authorize rclone for access
Enter verification code> 4/AABw8gMKPxxxxxxxxxx
Configure this as a team drive?
y) Yes
n) No
y/n> n
--------------------
[remote]
type = drive
client_id =
client_secret =
scope = drive
root_folder_id =
service_account_file =
token = {"access_token":"xxx","token_type":"Bearer","refresh_token":"1/xxx","expiry":"2018-05-16T10:55:03.488381196+07: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

Vậy là xong, giờ bạn có thể test với lệnh liệt kê thư mục trong kết nối remote:

rclone lsd remote:

2. Tạo kết nối với Amazon Drive/One Drive/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.
Lưu ý: Đối với OneDrive cần chọn đúng loại tài khoản cá nhân Personal/doanh nghiệp Bussiness.

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".

Ví dụ cụ thể OneDrive, đến bước xác thực:

Microsoft App Client Id - leave blank normally.
client_id>
Microsoft App Client Secret - leave blank normally.
client_secret>
Remote config
Choose OneDrive account type?
 * Say b for a OneDrive business account
 * Say p for a personal OneDrive account
b) Business
p) Personal
b/p> p
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"

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ể, WindowsAMD64 – 64 Bit được rclone-v1.42-windows-amd64. 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 lệnh trên với đường dẫn file. Ví dụ, 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.
C:\Users\HocVPS>D:\Rclone\rclone.exe authorize "onedrive"

Choose OneDrive account type?
* Say b for a OneDrive business account
* Say p for a personal OneDrive account
b) Business
p) Personal
b/p> p
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code
Paste the following into your remote machine --->
{"access_token":"EwD4Aq1DBAAUcSSzoTJJxxx","expiry":"2018-05-16T11:43:25.3184173+07:00""}
<---End paste

Chú ý,  access_token là một chuỗi kí tự liền mạch nên khi copy từ CMD bạn paste qua trình chỉnh sửa như EmEditor hay Notepad++ để loại bỏ hoàn toàn các kí tự thừa gây cách dòng.

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, nếu bạn sử dụng kết nối khác thì thay đổi tên trong script
– Nếu bạn sử dụng hệ quản trị khác HocVPS thì sử dụng script 2 và sửa thông tin đăng nhập MySQL, đường dẫn thư mục source code và thư mục Nginx Conf

Script này mình viết theo cấu trúc folder trên server do HocVPS Script quản lý.

– 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 $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
/usr/sbin/rclone cleanup "remote:" #Cleanup Trash
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
# Version: 1.1
#!/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 $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
/usr/sbin/rclone cleanup "remote:" #Cleanup Trash
echo "Finished";
echo '';

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


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. Hiện tại, tự động xóa file/folder cũ hơn 2 tuần.

– 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é.

Tagged:

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

965 Comments

  1. Hanh Doan 2 comment

    Sao mình không xem được các file và thư mục đã backup trong thư mục /root/backup/ nhỉ.
    Mình dùng lệnh ls

  2. Vỹ Lê 2 comment

    Hi Admin, mong bạn hỗ trợ, VPS của mình 80GB, đã sử dụng 64% dung lượng ổ cứng.
    Nếu backup 1 lần tất cả các web trong thư mục /home/* thì không đủ dung lượng.
    Có cách nào chia nhỏ backup 1/2 thư mục home sau đó đưa lên Gdrive, rồi xóa file zip, sau đó backup tiếp 1/2 thư mục home còn lại rồi đưa lên Gdrive rồi xóa file zip.
    Mong nhận được hỗ trợ từ bạn!

    1. Việt Phương Moderator

      Trường hợp này bạn cần code thủ công rồi. Liệt kê tên các thư mục cần zip

    2. Vu Nguyen 12 comment

      Bạn dùng thử đoạn script này nhé. Mình edit lại từ script backup của HOCVPS. Mình hok rành về script shell nên cũng hok xử lý được việc folder mysql và nginx hok tách ra đc theo từng website.

      # HocVPS Script Plugin – Backup Server and Upload to Cloud

      #!/bin/bash

      SERVER_NAME=VPS15065JA

      TIMESTAMP=$(date +”%F”)
      MYSQL=/usr/bin/mysql
      MYSQLDUMP=/usr/bin/mysqldump
      SECONDS=0
      # Loop through /home directory
      echo “”;
      echo “=============== BEGIN BACKUP TO ALL WEBSITE TO GOOGLE DRIVE ===============”;
      echo “”;
      for D in /home/*; do
      if [ -d “${D}” ]; then #If a directory
      domain=${D##*/} # Domain name
      BACKUP_DIR=”/root/backup/$domain/$TIMESTAMP”
      BACKUP_REMOVE_VPS=”/root/backup/$domain”
      if [ “$domain” != “-” ]; then
      echo “”;
      echo ‘================= START BACKUP TO GOOGLE DRIVE =================’;
      echo “”;
      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
      echo ” Backup Database “$db;
      $MYSQLDUMP –force –opt $db | gzip > “$BACKUP_DIR/mysql/$db.gz”
      done
      echo “Finished”;
      echo ‘==========================================================’;
      echo ”;
      echo “Starting Backup Website”;

      echo “- “$domain;
      zip -r $BACKUP_DIR/$domain.zip /home/$domain/public_html/ -q -x /home/$domain/public_html/wp-content/cache/**\* #Exclude cache

      echo “Finished”;
      echo ‘==========================================================’;
      echo ”;

      echo “Starting Backup Nginx Configuration”;
      file_domain=$domain.”conf”
      for cauhinh in /etc/nginx/conf.d/*; do
      config_ne=${cauhinh##*/}

      if [ “$config_ne” = “$file_domain” ]; then
      echo ” Finded File Configuration “$config_ne;
      echo ” Backup Nginx Configuration of “$domain;
      cp -r /etc/nginx/conf.d/ $BACKUP_DIR/nginx/
      fi
      done
      echo “Finished”;
      echo ‘==========================================================’;
      echo ”;
      size=$(du -sh $BACKUP_DIR | awk ‘{ print $1}’)

      echo “Starting Uploading Backup”;
      /usr/sbin/rclone move $BACKUP_DIR “remote:$SERVER_NAME/$domain/$TIMESTAMP” >> /var/log/rclone.log 2>&1
      echo ” “$BACKUP_DIR” remote:$SERVER_NAME/$domain/$TIMESTAMP”;
      echo “Finished”;
      echo ‘==========================================================’;
      echo ”;
      echo “Starting Clean Up Source Backup”
      # Clean up
      rm -rf $BACKUP_REMOVE_VPS
      echo ” “$BACKUP_REMOVE_VPS;
      echo “Finished”;
      duration=$SECONDS
      echo “Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed.”
      echo “”;
      echo ‘================= END BACKUP TO GOOGLE DRIVE =================’;
      echo “”;
      fi
      fi
      done
      echo “”;
      echo “=============== FINISHED BACKUP TO ALL WEBSITE TO GOOGLE DRIVE ===============”;
      echo “”;
      /usr/sbin/rclone -q –min-age 2d delete “remote:$SERVER_NAME” #Remove all backups older than 2 week
      /usr/sbin/rclone -q –min-age 2d rmdirs “remote:$SERVER_NAME” #Remove all empty folders older than 2 week
      /usr/sbin/rclone cleanup “remote:” #Cleanup Trash
      echo “Finished”;
      echo ”;

      1. Vu Nguyen 12 comment

        Ah quên, Script này backup xong website A thì sẽ upload lên drive. Sau đó xóa backup website A trên VPS -> giải phóng dung lượng cho VPS rồi mới tiếp tục backup tiếp. Mình nghĩ nó sẽ giúp đc bạn.

        p/s: Nếu đc, nhờ bạn Việt Phương giúp mình thêm cái đoạn tách database của từng website nhé. Thanks

    3. D 11 comment

      Chỉ sao lưu database và những thư mục upload hay logs thôi chứ ai lại zip toàn bộ sourcecode

  3. Trung 19 comment

    Thư mục upload web wordpress của mình rất lớn ( 4gb) nên mình không muốn backup thư mục này hàng ngày thì có làm được k nhi?

    1. Việt Phương Moderator

      Được nhé, bạn loại trừ trong câu lệnh tạo file nén là được. Trong câu lệnh ý mình cũng đã loại trừ thư mục cache đó

      1. Trung 19 comment

        Mình có add thêm dòng này vào backup.sh file rồi nhưng nó vẫn backup cả thư mục 2019 là sao nhỉ
        zip -r $BACKUP_DIR/$domain.zip /home/$domain/public_html/ -q -x /home/$domain/public_html/wp-content/uploads/2019/**\* #Exclude img

      2. Trung 19 comment

        Câu lệnh mẫu không loại trừ thư mục cache nhé (vẫn backup cả thư mục cache khi download về). Admin cho xem lại giúp với, mình rất muốn loại trừ thư mục up ảnh

  4. Hanh Doan 19 comment

    Tài khoản gmail 15gb của mình bị đầy nên giờ muốn thay sang tài khoản tài khoản khác cụ thể là gsuit gmail theo domain ten@mydomain.com thì có được không admin? nếu được hướng dẫn giúp mình với. Thks nhiều!

  5. Nguyen Nguyen 8 comment

    Chia sẻ với các bạn báo lỗi ERROR 1045 (28000): Access denied for user ‘admin’@’localhost’ (using password: YES)
    – VPS của AZDigi không cài hocvps mà dùng Directadmin.
    – Lúc đầu mình tạo file backup.sh bằng script 1 (đối với hocvps 2.0 trở lên) thì báo lỗi như trên, sau đó mình thay đổi bằng Script 2 (đối với hocvps 1.8 trở xuống), ở phần:
    MYSQL_USER=”root”
    MYSQL_PASSWORD=$mariadbpass
    các bạn thay bằng tên mysql và password mysql (không nhớ thì xem trong file wp-config.php) là sẽ không còn báo lỗi nữa.
    – Nếu dùng Apache thì đổi đường dẫn trong script thành:
    echo “Starting Backup Nginx Configuration”;
    cp -r /etc/httpd/conf/ $BACKUP_DIR/Apache/

    Vấn đề đặt ra là: Nếu VPS cài từ 2 domain trở lên có nhiều hơn 1 database thì không biết giải quyết thế nào? :))
    Còn 1 VPS mình mua của DO cài hocvps 2.0 sử dụng rclone theo hướng dẫn như bên trên thì ngon lành cành me, làm là chạy luôn.

    1. Việt Phương Moderator

      Bạn tìm tài khoản root/admin của MySQL nhé, tài khoản mà quản lý tổng thể các database
      Mỗi database được quản lý bởi 1 user, nhưng vẫn có tài khoản root/admin quản lý chung các user đó

  6. Thao 7 comment

    Chào bác, mình đang chạy backup VPS lên Drive theo sripts backup của bác. ok mượt lắm nhưng có 1 lỗi là mỗi user nó lấy đúng 1 domain thôi không backup hết dc
    Mình đang xài DA

    1. Việt Phương Moderator

      DA thì bạn cần tự chỉnh sửa script riêng rồi, vì thư mục domain còn nằm trong thư mục của từng user

  7. Ngô Văn Cương 142 comment

    Admin ơi cho mình hỏi đoạn if [ -d “${D}” ]; then #If a directory mình có 2 tên miền mặc định là default và suspended mình muốn loại trừ nó ra thì sao ạ ?

    1. Việt Phương Moderator

      Thư mục nào bên trong không có public_html thì nó sẽ không nén đâu

        1. Việt Phương Moderator

          Bạn loại trừ ra theo phần x đó
          zip -r $BACKUP_DIR/$domain.zip /home/$domain/public_html/ -q -x /home/$domain/public_html/wp-content/cache/**\*

  8. Ngô Văn Cương 142 comment

    Ad cho em hỏi đoạn này chỗ server của em là
    {username}/domains/{tên miền}/public_html thì cấu hình sao ạ
    ==========
    zip -r $BACKUP_DIR/$domain.zip /home/$domain/public_html/ -q -x /home/$domain/public_html/wp-content/cache/**\* #Exclude cache

    1. Việt Phương Moderator

      Thế bạn nhập đường dẫn cứng cho phần /home/$domain/public_html/ nhé

      1. Ngô Văn Cương 142 comment

        Do có nhiều username ý ad. Nên không nhập được đường dẫn cứng. em có tuỳ biến 1 chút như sau mà không chạy

        for D in /home/*; do
        if [ -d “${D}” ]; then #If a directory
        domain=${D##*/} # Domain name
        for C in /home/$domain/domains/; do
        if [ -d “${C}” ]; then
        cuong=${C##*/}
        echo “- “$cuong;
        zip -r $BACKUP_DIR/$domain.zip /home/$domain/domains/$cuong/public_html/ -q -x /home/$domain/domains/$cuong/public_html/wp-content/cache/**\* #Exclude cache
        fi
        done
        fi
        done

        Em tạo ra 2 vòng lặp để 1 vòng quét user name và một vòng quét tên miền trong user name nhưng kết quả không được

  9. Ngô Văn Cương 142 comment

    Em sử dụng Rclone để backup với ERROR 1045 (28000): Access denied for user ‘admin’@’localhost’ (using password: YES)
    Em dùng Directadmin
    Rất mong được ad hỗ trợ

    1. Việt Phương Moderator

      Bạn kiểm tra lại khả năng đăng nhập của user admin nhé. Như thông báo thì không đăng nhập được

      1. Ngô Văn Cương 142 comment

        đúng rồi ad, ad cho em hỏi thêm về đoạn này.
        Trên direct admin thì đường dẫn của em là
        {username}/domains/{Tên domain}
        Thì đoạn này em phải chỉnh sửa như nào ạ?
        zip -r $BACKUP_DIR/$domain.zip /home/$domain/public_html/ -q -x /home/$domain/public_html/wp-content/cache/**\* #Exclude cache

  10. Phương Dung 1 comment

    Bạn ơi muốn loại bỏ backup 1 domain nào đó thì thêm đoạn nào vào bash nhỉ

    1. Việt Phương Moderator

      Phần Loop through /home directory đoạn zip là backup thư mục. Bạn loại ra ở đây nhé

  11. Nguyễn Hữu Ánh 1 comment

    Mình làm theo hướng dẫn và backup ngon lành lên Google Drive.
    Nhưng crontab không hoạt động lúc 2h00, chỉ chạy khi mình gọi tới.

    #chmod +x /root/backup.sh
    #crontab -l
    0 2 * * * /root/backup.sh > /dev/null 2>&1
    # service crond status
    Redirecting to /bin/systemctl status crond.service
    ● crond.service – Command Scheduler
    Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
    Active: active (running) since Sun 2019-03-24 10:32:53 +07; 23h ago
    Main PID: 3791 (crond)
    CGroup: /system.slice/crond.service
    └─3791 /usr/sbin/crond -n

    Mar 24 10:32:53 163-44-206-80 systemd[1]: Started Command Scheduler.
    Mar 24 10:32:53 163-44-206-80 crond[3791]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 67% if used.)
    Mar 24 10:32:53 163-44-206-80 crond[3791]: (CRON) INFO (running with inotify support)

  12. Phong 11 comment

    Chào mod, có thể cho em hỏi làm sao để backup nguyên vps mà không cần phải cài lại hocvps rồi backup sql+file vậy ạ. em tính chuyển vps ạ.

    1. Việt Phương Moderator

      Chỉ có tính năng snapshot của nhà cung cấp VPS thôi bạn. Khi đó họ backup cả VPS cho bạn, để chuyển sang VPS mới (vẫn của nhà cung cấp đó)

  13. BlogHocPiano 3 comment

    Chào anh.

    Em mới mua vps openvz của azdigi và nhờ bên này cấu hình directadmin. Em không biết làm sao để quản trị vps tốt nhất và dùng lệnh backup dữ liệu như thế nào?
    Anh nào hướng dẫn cơ bản giúp em với 🙁

    1. Việt Phương Moderator

      DirectAdmin thì có các hướng dẫn trên mạng hết rồi, bạn tham khảo nhé. Các hoạt động quản lý hầu hết trên giao diện web, cũng dễ thao tác

        1. Việt Phương Moderator

          Restore thì thực hiện thủ công nhé. Làm nhiều là quen
          Script đã giúp backup tự động rồi

  14. Dung 30 comment

    Bạn cho mình hỏi là restart nginx thì Rclone và Cronjob còn chạy không vậy.

    Thank bạn nhé !

    1. Việt Phương Moderator

      Vẫn chạy bình thường nhé bạn. Các service hoạt động độc lập

  15. Bùi Viết Tâm 11 comment

    Hi ad,
    Mình cài trên VPS khác toàn mặc định theo hướng dẫn của bạn thì chạy bình thường.
    Cài thêm y như vậy trên VPS khác thì bị lỗi này:
    Starting Uploading Backup
    /root/backup.sh: line 47: /usr/sbin/rclone: No such file or directory
    /root/backup.sh: line 48: /usr/sbin/rclone: No such file or directory
    /root/backup.sh: line 49: /usr/sbin/rclone: No such file or directory

    * Toàn bộ mình cài mặc định theo hướng dẫn
    * Lệnh config của mình đây: # rclone config
    Current remotes:

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

    * Mình chạy lệnh backup để test:
    # /root/backup.sh
    Starting Backup Database
    Finished

    Starting Backup Website
    – it.name.vn
    – pandorahoteldn.com
    Finished

    Starting Backup Nginx Configuration
    Finished

    Starting Uploading Backup
    /root/backup.sh: line 47: /usr/sbin/rclone: No such file or directory
    /root/backup.sh: line 48: /usr/sbin/rclone: No such file or directory
    /root/backup.sh: line 49: /usr/sbin/rclone: No such file or directory
    Finished

    Total 1.3G, 4 minutes and 14 seconds elapsed.

    * Mình tìm mãi không biết lỗi gì, mong ad giúp đỡ

    1. Việt Phương Moderator

      Theo như thông báo thì bạn chưa cài đặt rclone
      /usr/sbin/rclone: No such file or directory

      1. Bùi Viết Tâm 11 comment

        Oh đúng rồi, mình bắt đầu từ 1. Tạo kết nối với Google Drive
        # rclone config
        Mà ko cài rclone vẫn config được bạn nhỉ.

        Mình cài thêm phần đầu và chạy ok rồi.
        Thank ad

  16. Uno 3 comment

    Hiện tại mình backup lên Google Drive lưu trữ mười mấy bản backup, vì dung lượng Drive có hạn nên mình muốn giảm số bản backup lưu trữ trên Drive xuống 5 hoặc 7 ngày gần nhất thôi thì làm thê nào?

    1. Việt Phương Moderator

      Bạn chỉnh theo crontab nhé. Crontab quy định tần suất chạy script backup

    1. Việt Phương Moderator

      Bạn làm sai bước rồi nên bạn đọc lại hướng dẫn và làm lại nhé

  17. Bạc Đỏ 67 comment

    Mình muốn upload thẳng thư mục home/domain dạng nguyên bản từng file lên cloud, mà không phải nén zip thành 1 file thì làm như thế nào nhỉ.

    Vì hiện tại nếu nén zip thành 1 file thì file đó có dung lượng lớn quá > 20GB. Rất nhiều lúc VPS không upload lên cloud được do CPU hoặc RAM bị quá tải, nên mình tính để nguyên bản thành từng file nhỏ lẻ

    1. Việt Phương Moderator

      Bạn sửa script bỏ câu lệnh nén đi nhé. Sau đó để upload nguyên thư mục

      1. Bạc Đỏ 67 comment

        Có phải sửa chỗ này như thế này đúng ko bạn Phương

        echo “Starting Uploading Backup”;
        /usr/sbin/rclone copy $BACKUP_DIR2 “remote:$SERVER_NAME/$TIMESTAMP” >> /var/log/rclone.log 2>&1

        Trước đó set BACKUP_DIR2=”/home/domain/public_html/$TIMESTAMP”

        1. Việt Phương Moderator

          Bạn tự test thì rõ hơn nhé. Trong script cũng đã có note phần nào Database, phần nào Source Code và phần nào là upload

          1. Bạc Đỏ 67 comment

            Mình làm được rồi.

            Tuy nhiên backup theo cách này lâu vãi chưởng. 12 giờ ms upload được gần 3 GB. Căn bản cũng do nhiều file

          2. Việt Phương Moderator

            Căn bản mã nguồn là nhiều file. Đôi khi các file 1KB 2KB rồi file ảnh cũng tính là 1 lần upload

  18. TienTri 28 comment

    Mình sử dụng VPS của Vultr. Nay mình đã backup và chuyển sang VPS khác or sever khác trên Vultr thì Up lên như thế nào? Trong mục III có nói đến, nhưng mình không biết cụ thể làm như thế nào? Nhờ các bạn chỉ giúp. Cảm ơn các bạn vui vẻ.

      1. Tien Tri 28 comment

        Chào Phương,
        Vui lòng cho mình hỏi 4 câu nha. ( làm nhiều lần và đọc kỹ mà chưa được nên mới hỏi Phương )

        1. Mình tạo website là gồm các bước:
        – Tạo server trên VPS, cài hocvps, vào hocvps THÊM DOMAIN, THÊM DATABASE.
        ( KHÔNG cài SSL và WP )
        Có phải tới vậy không bạn?

        2. Các web mình dùng WP thì mình dùng Plugin Duplication tiện hơn phải không bạn? So với cách này thì Duplication có nhưng hạn chế gì?

        3. Khi mình dùng lệnh /root/backup.sh thì chạy:
        – Starting Backup Database
        Finished
        – Starting Backup Website
        Liệt kê các website
        ..
        ..
        – Starting Backup Nginx Configuration
        Finished
        Rồi 1 hồi lại có dòng sau:
        Starting Backup Database
        Enter Password:
        ( Mình vào /root/.my.cnf lấy password nhập vào thì lại có Tiếp Enter Password, kiểu như sau, còn nhập pass khác thì báo sai)
        Enter Password:
        Enter Password:
        Enter Password:
        Còn dùng lệnh mysql -u root thì cho kết OK
        Welcome to the MariaDB monitor. Commands end with ; or \g.
        ..
        ..
        MariaDB [(none)]>

        Như vậy là bình thường hay có bị sai gì không Phương?

        4. Khi nào mình sử dụng Backup $1/1 month của Vulltr? Cái này giúp ích mình khi nào?

        Rất cảm ơn Phương và anh em trang hocvps.

        1. Việt Phương Moderator

          1. Đúng rồi.
          2. Đối với dùng WP thì 2 cách như nhau. Duplicator thì nhanh và tiện hơn nhưng không áp dụng với dữ liệu quá lớn, tầm 2GB trở lên
          3. Bạn HocVPS phiên bản nào? Script Backup có dùng đúng phiên bản không (có 2 loại script backup mình đã note rõ)
          Kiểm tra mật khẩu lưu trong /root/.my.cnf và /etc/hocvps/scripts.conf có đăng nhập được tài khoản root của MySQL không
          4. Vultr sẽ backup toàn bộ VPS, không riêng gì phần nào

          1. Tien Tri 28 comment

            3. Hocvps 2.0.4
            pass trong root/.my.cnf và /etc/hocvps/scripts.conf Khớp với nhau.
            Lấy nhập vào thì chứ
            Enter password
            Enter password
            Enter password
            Enter password

            Không biết có đúng không?
            4. Nếu khó quá mình dùng $1/ 1 tháng của VPS phải không bạn? Mà không biết dùng sao nữa?

          2. Việt Phương Moderator

            3. Như vậy bạn không auto backup được rồi. Phải điền mật khẩu thủ công
            Bạn sử dụng script phiên bản 1.8 rồi điền thẳng mật khẩu vào nội dung script phần dòng MYSQL_PASSWORD=$mariadbpass
            4. Uhm. Bạn có thể tham khảo https://www.vultr.com/docs/vps-automatic-backups

          3. Tri 28 comment

            Anh đang dùng Hocvps 2.04
            Kiểm tra google drive vẫn có thư mục HOCVPS_BACKUP theo từng ngày, vào vẫn có các file.
            Mà chưa thử up lên. Tức cái là không nó chứ
            Enter password
            Enter password
            Enter password
            Nghĩa là sau khi chạy 1 hồi thì hỏi: Enter password database?
            Nhập vào thì tiếp tục
            Enter password
            Enter password
            Nếu nhập sai pass thì báo lỗi.
            Không biết cái pass nhập đó đúng không?
            Vì anh tính đầu tháng mua 1 cái VPS mới rồi up thử cái file ở google drive lên.
            Anh cũng không biết website cở 2GB là cỡ nào? nếu không dùng Duplication cho khỏe.

          4. Việt Phương Moderator

            1. Anh cứ dùng Duplicator thì rõ thôi. Lỗi nó sẽ báo cho biết còn không báo gì tức okie
            2. Anh restore xem nội dung thư mục backup bên trong đủ các thành phần không nhé

  19. Emerald 8 comment

    Cho mình hỏi nhiều tiến trình rclone chạy một lúc có được không ?

      1. Emerald 8 comment

        ^^ Do tính chất công việc backup lên gdrive vài trăm GB lận, mà trên DC chỉ cho 10-20Mbps nên nhiều khi nó chạy vài ngày mới xong. Nhưng mà mình test thì có vẻ như chạy song song tốt. Cám ơn bạn đã trả lời.

  20. T.Anh 1 comment

    Cho em hỏi, em muốn 2 ngày backup 1 lần, nội dung cronjob ghi sao vậy anh.

  21. Phi 14 comment

    Mình gặp lỗi Access denied for user khi chạy là bị sao nhỉ

    [root@sv backup]# /root/backup.sh
    Starting Backup Database
    ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
    Finished

    1. Phi 14 comment

      Đã thử thêm cách trong phần backup mysql mình có thêm u với pass nhưng vẫn ko được
      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 -u root -ptestpassword –force –opt $db | gzip > “$BACKUP_DIR/mysql/$db.gz”
      done

      testpassword là mật khẩu user root

      có chạy thêm lệnh GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘testpassword’;

      1. Việt Phương Moderator

        Bạn truy cập thủ công trên SSH có vào đc MySQL bằng user và mật khẩu đó không?

        1. Phi 14 comment

          Vẫn vào được ạ, khi mình chạy lệnh
          $MYSQLDUMP -u root -ptestpassword –force –opt $db | gzip > “$BACKUP_DIR/mysql/$db.gz”
          thay các tham số cần vào thì nó vẫn chạy ổn,
          đăng nhập ok luôn

        2. Phi 14 comment

          Đây ạ

          [root@sv home]# mysql -u root

          ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)

          [root@sv home]# mysql -u root -p

          Enter password:
          [root@sv home]# mysql -u root -ptestpassword
          Welcome to the MariaDB monitor. Commands end with ; or \g.
          Your MariaDB connection id is 6400
          Server version: 10.0.37-MariaDB MariaDB Server

          Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

          Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

          MariaDB [(none)]>

          1. Việt Phương Moderator

            Như vậy, mật khẩu trong /root/.my.cnf đang sai khiến bạn không truy cập được MySQL
            Bạn cập nhật lại mật khẩu trong file ý nhé

  22. Thành 2 comment

    Của mình cài hoàn tất xong, chạy lệnh : thì nó báo vậy,

    Starting Uploading Backup
    2018/10/30 10:03:16 Failed to create file system for “remote:HOCVPS_BACKUP”: didn’t find section in config file
    2018/10/30 10:03:16 Failed to create file system for “remote:HOCVPS_BACKUP”: didn’t find section in config file
    2018/10/30 10:03:16 Failed to create file system for “remote:”: didn’t find section in config file
    Finished

    Chạy config thì như vậy .

    Name Type
    ==== ====
    HOCVPS_BACKUP drive

    Server name trong script cũng là : SERVER_NAME=HOCVPS_BACKUP.

    Ad xem giúp mình với ạ. Mình cảm ơn

    1. Việt Phương Moderator

      Như vậy bạn phải sửa tên kết nối trong script backup
      Tên kết nối của script là remote
      Tên kết nối của bạn là HOCVPS_BACKUP

      1. Mỹ 3 comment

        Mình cũng bị y như vậy nhưng sửa rồi vẫn bị

        [HOCVPS_BACKUP]
        type = drive
        client_id =
        client_secret =
        scope = drive
        root_folder_id =
        service_account_file =
        token = {“access_token”:”ya29.GltaBmZCmiGQrlxTDCObw_X3u94gEbKWTGxJPQfB87LYiYg2wVbFmgvVnGwCwxGMqlP5Pui0fNVzWpUQIcgLFtW_2_CQlh95QJsvlvu1lEgI2vI_tNrdcOxDE15x”,”token_type”:”Bearer”,”refresh_token”:”1/I2IWPzNwYRSKElXGUI7iiRiP6blsepGshoUtJSAXXjR_cgCEP_kKL-RLe2AhIiQw”,”e….

        Cài hôm bữa được, hôm nay đổi tài khoản google cloud cái không up lên được nưuax

  23. Vĩ Nguyễn 4 comment

    Có scrip backup rồi mà tìm hoài ko có script auto backup toàn bộ remote lại nhỉ

      1. Vi Nguyen 4 comment

        đúng rồi ad, như cái scrip backup.sh, giờ mình có thể viết scrip restore.sh đc ko ta

  24. Trần Nguyên Bảo 4 comment

    Cho mình hỏi có cách nào đưa data vào drive nhóm được không, mình dùng drive nhóm không giới hạn để backup.

    1. Việt Phương Moderator

      Lúc config đoạn này bạn chọn y nhé
      Configure this as a team drive?
      y) Yes
      n) No
      y/n>

  25. Emerald 4 comment

    Mình chỉ muốn mỗi tuần tự backup một thư mục lên driver thì làm cách nào ?

    1. Việt Phương Moderator

      Bạn giải nén xem bên trong những gì. Có thể source code bạn thế thật

  26. Nguyễn Duy Khánh 32 comment

    VPS của e chạy ổn được 5 ngày thì kiểm tra lệnh /root/backup.sh
    thấy báo rất nhiều lỗi, hình như lỗi token, có khách nào update token mới ko a?

    1. Việt Phương Moderator

      Bạn chạy rclone config rồi edit lại config
      Hoặc xóa config đi rồi tạo cái mới tên y hệt

  27. lamnghe 1 comment

    Anh cho em hỏi, site chạy chủ yếu usa chọn giờ nào backup là ổn vậy anh…
    với lại mình muốn restore lại sao vậy anh, có bài hướng dẫn restore lại ko vậy anh, sao khi backup thì thấy có 3 file. 1 file .zip, 1 file .conf, 1 file .gz. Xin cảm ơn

  28. Khánh 32 comment

    Của e gặp lỗi này ở đoạn cuối phần 3 chỗ lệnh /root/backup.sh

    Starting Uploading Backup
    2018/09/26 23:59:01 Failed to create file system for “remote:HOCVPS_BACKUP”: didn’t find section in config file
    2018/09/26 23:59:01 Failed to create file system for “remote:HOCVPS_BACKUP”: didn’t find section in config file
    2018/09/26 23:59:01 Failed to create file system for “remote:”: didn’t find section in config file

    A có thễ chỉ e cách xử lý được ko a ơi

        1. Việt Phương Moderator

          Tên kết nối của bạn là backupkhanhorg thì bạn sửa như thế trong script backup nhé
          Script backup là dùng kết nối tên remote

  29. Khánh 32 comment

    E bị lỗi này rclone lsl remote:HOCVPS_BACKUP
    A giúp e với a ơi :)) E phải sửa ở chỗ nào vậy ạ

  30. Alfred 2 comment

    Cho em hỏi là em muốn backup mỗi tuần 1 lần vào 2h sáng, Ngày chủ nhật thì dòng lệnh bên dưới có đúng không ạ?
    0 2 * * 0 /root/backup.sh > /dev/null 2>&1

  31. Lâm Văn Chương 2 comment

    Anh cho em hỏi em cứ làm đến bước: rclone lsl remote:HOCVPS_BACKUP

    là bị báo lỗi như thế này ạ

    2018/09/13 11:16:06 ERROR : : error listing: directory not found
    2018/09/13 11:16:06 Failed to lsl: directory not found

      1. Hạnh Trương 1 comment

        E cũng bị lỗi như trên mặc dù đã kết nối thành công đến drive rồi ạ

        1. Việt Phương Moderator

          Bạn mô tả lỗi và cung cấp nội dung của
          rclone lsd remote:
          rclone config

      1. Lê Thịnh 25 comment

        Mình định lưu 4 bản gần nhất. Sao mình để là 1m và mình backup 1 tuần 1 lần nhưng khi backup thì nó xóa luôn bản backup cũ nhỉ, chỉ lưu đc 1 bản

          1. Lê Thịnh 25 comment

            Đây bạn:
            # Clean up
            rm -rf $BACKUP_DIR
            /usr/sbin/rclone -q –min-age 1m delete “remote:$SERVER_NAME” #Remove all backups older than 1 month
            /usr/sbin/rclone -q –min-age 1m rmdirs “remote:$SERVER_NAME” #Remove all empty folders older than 1 month
            /usr/sbin/rclone cleanup “remote:” #Cleanup Trash
            echo “Finished”;
            echo ”;

            —————————
            Còn đây là cronjob
            0 1 * * 1 /root/backup-data.sh > /dev/null 2>&1

          2. Việt Phương Moderator

            ms|s|m|h|d|w|M|y nên bạn dùng M nhé. Cụ thể
            ms – Milliseconds
            s – Seconds
            m – Minutes
            h – Hours
            d – Days
            w – Weeks
            M – Months
            y – Years

  32. Việt Hoàng 1 comment

    anh có thể hướng dẫn cụ thể tạo 2 script backup cho 2 loại website không, loại 1 backup hàng ngày, loại 2 backup 2 tuần 1 lần

    1. Việt Phương Moderator

      Bạn xóa trong /usr/sbin rm -rf /usr/sbin/rclone
      Và bỏ cronjob đã thiết lập đi

      1. Viet Pham 16 comment

        rclone thay vì chạy hàng ngày em cho chạy thành hàng tuần được không ạ? Và nếu được nữa thì db backup daily, source backup weekly ạ?

        1. Việt Phương Moderator

          1. Chạy hàng tuần thì bạn sửa cronjob
          2. Thế bạn làm 2 script. Script A chỉ backup db thì chỉnh cronjob hàng ngày. Script B chỉ backup source thì chỉnh cronjob hàng tuần
          Có thể đặt tên thư mục khác đi

          1. Viet Pham 16 comment

            Hi anh,
            Số 1. * 2 * * 0 /root/backup.sh > /dev/null 2>&1 –> E viết vầy đúng chưa ạ, nó sẽ chạy vào 2am Chủ nhật hàng tuần.
            Số 2. Có phải em tách chỗ này ra thành 2 script pk a: http://prntscr.com/kskw0n
            Ngoài ra các phần khác chạy tương tự phải không ạ? Ngix có cần backup theo không ạ?

  33. Tien Léo 19 comment

    Bạn ơi giờ mình muốn backup database lại theo từng tên domain và có đuôi là .sql thì chỉnh sửa hay thêm đoạn lệnh ntn vào trong script vậy bạn??
    Mình thường làm thủ công bằng tay với lệnh ntn ” # mysqldump –opt -u wordpress1 -p wordpress1 > domain1.sql”
    Nhưng rất mất thời gian và không tự động được. Bạn hướng dẫn mình được không? Mình xin cảm ơn!

    1. Việt Phương Moderator

      Trong script là backup theo từng database rồi mà bạn. Bạn chỉ cần sửa lại phần nén .gz trong script là được
      $MYSQLDUMP --force --opt $db | gzip > "$BACKUP_DIR/mysql/$db.gz"

      1. Tien Léo 19 comment

        Mình muốn backup thành file .sql thì sửa ntn trong script hả bạn? Chỉ mình với mình ko hiểu gì về code cả

          1. Tien Léo 19 comment

            Mình sửa lại và nhận đc lỗi như thế này khi chạy backup bạn ạ!
            Starting Backup Database
            /root/backup.sh: line 19: /root/backup/2018-08-21/mysql/giaodichnhadat24hnew.sql: No such file or directory
            mysqldump: Got errno 32 on write
            /root/backup.sh: line 19: /root/backup/2018-08-21/mysql/giaodichnhadat24hold.sql: No such file or directory
            mysqldump: Got errno 32 on write
            /root/backup.sh: line 19: /root/backup/2018-08-21/mysql/wordpress.sql: No such file or directory
            mysqldump: Got errno 32 on write
            Finished
            Giúp mình với!

          2. Việt Phương Moderator

            Full script bạn như thế nào? Và hệ thống bạn là gì, có phải HocVPS không?

          3. Tien Léo 19 comment

            bạn ơi mình gặp lỗi này khi chạy /root/backup.sh

            NOTICE: Time may be set wrong – time from “www.googleapis.com” is 7m24.722142783s different
            from this computer
            2018/08/21 20:42:32 ERROR : Attempt 1/3 failed with 0 errors and: Google drive root ” doesn’t support cleanup
            2018/08/21 20:42:32 ERROR : Attempt 2/3 failed with 0 errors and: Google drive root ” doesn’t support cleanup
            2018/08/21 20:42:32 ERROR : Attempt 3/3 failed with 0 errors and: Google drive root ” doesn’t support cleanup
            2018/08/21 20:42:32 Failed to cleanup: Google drive root ” doesn’t support cleanup
            Finished

            Bạn sửa lối giúp mình vs..mình cái hocvps, linux centos 7 ạ

          4. Việt Phương Moderator

            Cho mình kết quả của
            # rclone -V
            # rclone config

          5. Tien Léo 19 comment

            Kết quả ntn bác ạ!
            # rclone -V
            rclone v1.36
            # rclone config
            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
            #