Việc backup dữ liệu website là điều mà các webmaster thường xuyên phải làm để đảm bảo an toàn dữ liệu nếu chẳng may hệ thống bị tấn công. Nếu trước đây bạn quen sử dụng share hosting thì việc backup (sao lưu) đã có nhà cung cấp hosting lo cho rồi. Giờ chuyển sang dùng VPS thì bạn phải là người chủ động backup dữ liệu cho VPS của mình.
Trong bài viết trước mình có hướng dẫn bạn cách cài HocVPS và cài VPSSIM để chạy web trên VPS rồi, bài này mình sẽ hướng dẫn bạn cách cài đặt tự động backup VPS lên Google Drive cho HocVPS và VPSSIM để bạn không còn phải thường xuyên backup dữ liệu thủ công bằng tay nữa. Để làm được việc này chúng ta sẽ sử dụng công cụ có tên Rclone – công cụ giúp đồng bộ hóa dữ liệu có khả năng kết nối với các dịch vụ lưu trữ đám mây.
Rclone là gì?
Như đã nói ở trên Rclone là công cụ giúp đồng bộ hóa dữ liệu với ưu điểm là nó có khả năng kết nối với các dịch vụ lưu trữ đám mây. Điều này đảm bảo cho dữ liệu được an toàn (không lo các vấn đề lỗi phần cứng), sao lưu nhanh chóng với tốc độ cao (hầu hết các dịch vụ lưu trữ hiện nay đều có server ở khắp nơi). Điều đặc biệt nhất là nó miễn phí!
Rclone hiện tại hỗ trợ kết nối tới hầu hết các cloud server phổ biến hiện nay như:
- Amazon Drive
- Amazon S3
- DigitalOcean Spaces
- Dropbox
- Google Cloud Storage
- Google Drive
- Mega
- Microsoft Azure Blob Storage
- Microsoft OneDrive
Ngoài ra còn nhiều cloud khác được hỗ trợ bạn có thể xem thêm ở đây. Trong bài này mình sẽ hướng dẫn bạn cài đặt tự động backup VPS lên Google Drive. Vì Google Drive cho dung lượng miễn phí 15Gb, tốc độ rất nhanh. Bạn chỉ cần đăng ký Gmail là có luôn tài khoản Google Drive. Bây giờ bắt tay vào thực hiện thôi.
Cài đặt Rclone lên VPS
Trước hết chúng ta cần download Rclone về VPS sau đó di chuyển sang thư mục /usr/sbin/
để sử dụng.
– Cài đặt Rclone v1.41 trên hệ điều hành 64bit
cd /root/ wget https://downloads.rclone.org/v1.41/rclone-v1.41-linux-amd64.zip unzip rclone-v*.zip \cp rclone-v*-linux-amd64/rclone /usr/sbin/ rm -rf rclone-*
– Cài đặt Rclone v1.41 trên hệ điều hành 32bit
cd /root/ wget https://downloads.rclone.org/v1.41/rclone-v1.41-linux-386.zip unzip rclone-v*.zip \cp rclone-v*-linux-386/rclone /usr/sbin/ rm -rf rclone-*
Giờ bạn có thể sử dụng lệnh rclone
để xem thêm thông tin.
Lưu ý: Nếu trên VPS của bạn đã cài đặt phiên bản cũ thì bạn chỉ cần chạy chuỗi lệnh trên để update. Tham khảo Changelog các phiên bản Rclone.
Hướng dẫn tạo kết nối VPS với Google Drive
Trước khi cài đặt tự động backup VPS lên Google Drive thì việc cần làm đó là kết nối VPS với Google Drive. Việc này bạn chỉ cần làm 1 lần và bạn làm như sau.
Đăng nhập VPS qua SSH rồi chạy lệnh:
rclone config
Nếu trên VPS của bạn chưa tạo kết nối nào thì sẽ nhận được thông báo No remotes found - make a new one
Nhập n
rồi ấn Enter để tạo kết nối mới
Dòng name bạn nhập tên kết nối là remote
hoặc bất cứ tên nào cũng được.
Một danh sách các cloud server hỗ trợ hiện ra. Nhập vào 11
rồi ấn Enter để chọn kết nối Google Drive.
Tiếp theo nó sẽ hỏi Client ID
và Client Secret
, bạn để trống rồi ấn Enter.
Đến phần Scope that rclone should use when requesting access from drive
. Bạn chọn 1
– Full access all files…. Để cấp quyền truy cập toàn bộ file trên Google Drive.
Tiếp theo, mục root_folder_id
và service_account_file
bạn để trống và ấn Enter
Nó sẽ hỏi Use auto config?
bạn nhập n
rồi ấn Enter. Lúc này, Rclone sẽ hiển thị 1 đường link, bạn click vào đó để mở hoặc copy và mở trên trình duyệt.
Nó sẽ yêu cầu bạn đăng nhập vào tài khoản Google để cấp quyền truy cập Google Drive. Sau đó bạn click vào Cho phép.
Bạn sẽ nhận được 1 đoạn mã xác nhận như sau, hãy copy đoạn mã này.
Quay trở lại cửa sổ SSH và dán đoạn mã vào mục Enter verification code
rồi ấn Enter.
Nó sẽ hỏi Configure this as a team drive?
bạn hãy nhập n
rồi ấn Enter.
Rclone tiếp tục yêu cầu bạn xác nhận 1 lần cuối, bạn nhập y
để đồng ý sau đó nhập q
để thoát.
Đối với các cloud server khác bạn có thể tham khảo cách làm ở đây.
Toàn bộ quá trình thực hiện kết nôi như sau (phần bôi đỏ là bạn cần nhập vào)
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 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH) \ "swift" 18 / Pcloud \ "pcloud" 19 / QingCloud Object Storage \ "qingstor" 20 / SSH/SFTP Connection \ "sftp" 21 / Webdav \ "webdav" 22 / Yandex Disk \ "yandex" 23 / 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=offline&client_id=xxxx Log in and authorize rclone for access Enter verification code> 4/AAB5IHz4Hck-xxxx 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":"xxxx","token_type":"Bearer","refresh_token":"1/nbUsLG_97wIijB4LRejWHpD6bdg_S1PZkNGWnWFdXiM","expiry":"2018-06-11T12:19:26.464416708-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
Như vậy là xong. Bây giờ bạn tạo 1 thư mục trên Google Drive sau đó dùng lệnh sau để kiểm tra xem nó đã kết nối với Google Drive chưa.
rclone lsd remote:
Nếu thấy kết quả tương tự như hình dưới là OK.
Tham khảo thêm: Backup website WordPress tự động bằng plugin miễn phí 100%
Tạo file backup toàn bộ VPS và upload lên Google Drive
Để hệ thống tự động tạo file backup VPS và upload lên Google Drive trong HocVPS script chúng ta sẽ sử dụng script tự động backup VPS của Luân Trần – tác giả của HocVPS Script. Còn để backup VPSSIM lên Google Drive thì mình có chỉnh sửa lại đoạn script trên cho phù hợp.
Kịch bản của script này là:
- Backup toàn bộ database MySQL trên VPS, mỗi database được tạo thành 1 file .gz và lưu trong thư mục
mysql
- Backup toàn bộ code trong thư mục
/home/domain.com/public_html/
, mỗi code web tạo thành 1 file .zip - Backup toàn bộ file cấu hình Nginx trong thư mục
/etc/nginx/conf.d/
và lưu trong thư mụcnginx
- Tổng hợp tất cả các file backup vào 1 folder
- Tự động upload file backup lên Google Drive vào khoảng thời gian bạn đặt.
- Tự động xóa file backup trên VPS sau khi upload xong.
- Thiết lập thời gian tự động xóa file backup cũ trên Google Drive.
Bây giờ chúng ta bắt đầu thực hiện như sau.
– Tạo file backup.sh
ở thư mục /root/
của VPS bằng lệnh sau:
nano /root/backup.sh
Copy và paste đoạn script ở dưới phù hợp với script bạn đang dùng.
Script backup HocVPS lên Google Drive
– Copy và paste script bên dưới vào cửa sổ SSH (script á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=BACKUP_VPS 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 1w delete "remote:$SERVER_NAME" #Remove all backups older than 1 week /usr/sbin/rclone -q --min-age 1w rmdirs "remote:$SERVER_NAME" #Remove all empty folders older than 1 week /usr/sbin/rclone cleanup "remote:" #Cleanup Trash echo "Finished"; echo ''; duration=$SECONDS echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."
– Nhấn Ctrl+O rồi ấn Enter để lưu và Ctrl+X để thoát.
Script backup VPSSIM lên Google Drive
SERVER_NAME=BACKUP_VPS TIMESTAMP=$(date +"%F") BACKUP_DIR="/root/backup/$TIMESTAMP" MYSQL_USER="root" MYSQL_PASSWORD="password" MYSQL=/usr/bin/mysql MYSQLDUMP=/usr/bin/mysqldump SECONDS=0 mkdir -p "$BACKUP_DIR/mysql" databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"` echo "Starting Backup Database"; for db in $databases; do $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.sql.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/ $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 1w delete "remote:$SERVER_NAME" #Remove all backups older than 1 week /usr/sbin/rclone -q --min-age 1w rmdirs "remote:$SERVER_NAME" #Remove all empty folders older than 1 week echo "Finished"; echo ''; duration=$SECONDS echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."
– Nhấn Ctrl+O rồi ấn Enter để lưu và Ctrl+X để thoát.
Lưu ý:
- SERVER_NAME mặc định là BACKUP_VPS, nếu muốn đổi tên thư mục trên Google Drive thì bạn sửa lại tên này.
- Bạn có thể thay đổi thời gian xóa file backup trên Google Drive bằng cách sửa thông số
1w
ở dòng--min-age 1w delete
và--min-age 1w rmdirs
. Hiện tại đang để là 1w – 1 tuần, bạn có thể sửa thành 2w – 2 tuần, 1d – 1 ngày,… - Chữ remote bạn cần sử đúng với tên kết nối mà bạn đã đặt khi tạo kết nối VPS với Google Drive ở trên.
- Với đoạn script cho VPSSIM thì bạn cần sửa 2 mục root và password thành tên đăng nhập và mật khẩu quản lý database (tài khoản phpMyadmin) của bạn.
– Phân quyền cho file script
chmod +x /root/backup.sh
– Vậy là xong, giờ bạn có thể test bằng cách chạy lệnh:
/root/backup.sh
Sau khi chạy lệnh xong bạn đăng nhập vào Google Drive kiểm tra xem có thư mục và dữ liệu upload lên chưa hoặc dùng lệnh
rclone lsl remote:BACKUP_VPS
Nếu bạn thấy danh sách trả về là các file trong thư mục có dạng như bên dưới là bạn đã làm thành công.
- 2018-06-12/domain.com.zip
- 2018-06-12/nginx/domain.com.conf
- 2018-06-12/mysql/database.gz
Tạo cronjob tự động backup VPS theo lịch
Sau khi làm xong các bước trên thì chỉ khi nào bạn chạy lệnh /root/backup.sh
thì VPS mới được backup. Vậy nên để nó hoạt động tự động theo lịch thì bạn cần thiết lập cronjob như sau.
Chạy lệnh sau để chỉnh sửa crontab
EDITOR=nano crontab -e
Dán nội dung sau vào cửa sổ SSH
0 2 * * 1,6 /root/backup.sh > /dev/null 2>&1
Nhấn Ctrl+O rồi ấn Enter để lưu và Ctrl+X để thoát.
Đoạn nội dung trên có nghĩa là script sẽ chạy tự động backup VPS và upload lên Google Drive vào lúc 2h sáng ngày thứ 2 và thứ 7 đồng thời tắt chức năng gửi email thông báo.
Lời kết
Như vậy là bài này mình đã hướng dẫn bạn cách cài đặt tự động backup VPS lên Google Drive cho HocVPS và VPSSIM. Ngoài ra, nó cũng hỗ trợ backup dữ liệu lên nhiều cloud server khác nhưng mình không tiện viết trong này, bạn có thể tự tìm hiểu thêm hoặc cần thiết thì để lại comment mình sẽ hướng dẫn nhanh cho.
Việc backup dữ liệu thường xuyên là điều vô cùng quan trọng, mình đã từng chủ quan không backup dữ liệu để rồi khi web bị tấn công mã độc mình phải ngồi khắc phục lại toàn bộ dữ liệu web sau khi bị hack rất chi là mệt. Đó là còn may mình vẫn còn dữ liệu để khôi phục, còn không may thì bao nhiêu dữ liệu sẽ bay hết.
hiên Rclone v1.41 không kết nối với google drive được nữa, nhờ admin hướng dẫn cài version mới được không, mình ko biết cách cài version mới
Bạn cài phiên bản mới cũng thao tác tương tự thôi nhé
mình cài Rclone-v1.63.0 thì thao tác thấy khác hẳn luôn ad
Mình xem qua trong hướng dẫn trên trang rclone.org thấy vẫn vậy mà nhỉ. Để lúc nào rảnh mình thử test với bản mới xem sao rồi mình update lại bài viết.
Mình dùng Cyberpanel thì script như thế nào ạ?
Bạn dùng Cyberpanel thì có thể cấu hình backup lên Google Drive ngay trong Panel là được nhé. Trên blog mình chưa viết bài hướng dẫn nên bạn có thể xem ở hướng dẫn này.
“0 2 * * 1,6 /root/backup.sh > /dev/null 2>&1” thứ 2 và thứ 7 là 1 và 6 phải k bạn?
Đúng rồi bạn.
hi chào ạ.
Mình thấy bài viết rất hay nhưng mình gặp chút vấn đề khi triển khai.
Thư mục list website của mình nó nằm trong thư mục var/www/tendomain/htdocs
giờ làm sao để mình có thể backup nó
Vậy là bạn đang dùng script nào hay cùng panel nào để quản trị VPS không phải HocVPS hay VPSSIM à. Nếu là script khác thì mình phải test mới biết đc là cách này nó có hoạt động ok trên VPS của bạn hay không.
# Loop through /home directory
for D in /var/www/*; do
if [ -d “${D}” ]; then #If a directory
domain=${D##*/} # Domain name
echo “- “$domain;
zip -r $BACKUP_DIR/$domain.zip /var/www/$domain/htdocs/ -q -x /var/www/$domain/htdocs/wp-content/cache/*** #Exclude cache
Bạn đổi thành như thế này là chạy được, mình test rồi, cám ơn bài viết này
Mình có góp ý:
Hiện tại vị trí của Google drive đã chuyển về số 13 không phải 11.
Ngoài ra bạn có thể chỉnh sửa lại phần cài đặt luôn Rclone bản mới nhất không cần cài bản 1.41 như của 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-*
Cảm ơn chia sẻ của bạn. Mình sẽ check lại và sẽ update lại bài viết sớm.
Bài viết quá hay cám ơn admin
Chào ad,
Mình làm theo hướng dẫn của ad thì bị lỗi này trong quá trình backup database(mình sử dụng VPSSIM).
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
Nó báo lỗi này là bạn đang bị sai mật khẩu root của phpMyadmin rồi. Bạn kiểm tra lại rồi nhập đúng vào trong đoạn script nha.