Hôm trước mình có chia sẻ một script giúp tự động backup toàn bộ website WordPress hoạt động trên server cài đặt HocVPS Script. Tuy nhiên, hôm nay mình sẽ giới thiệu một bash script khác tốt hơn, backup toàn bộ VPS kèm theo hướng dẫn tạo cronjob tự động chạy hàng ngày luôn.

Đoạn script này tự động backup toàn bộ dữ liệu trên server, bao gồm:

  1. Toàn bộ database MySQL, mỗi database một file .SQL
  2. Toàn bộ code trong thư mục public_html của domain, có dạng /home/domain.com/public_html/
  3. Toàn bộ cấu hình Nginx trong thư mục /etc/nginx/conf.d/

Tất cả dữ liệu sẽ được nén lại thành một file .ZIP và để ở thư mục /root/backup/, đồng thời tự động xóa những file backup cũ, chỉ giữ lại những file trong vòng 14 ngày trở lại.

Như vậy, bạn hoàn toàn có thể sử dụng script này để di chuyển VPS, hoặc khôi phục bất kỳ phần dữ liệu nào đó. Script mình viết tương thích với cấu trúc thư mục do HocVPS Script quản lý, tuy nhiên bạn cũng có thể chỉnh sửa lại để phù hợp với bất kỳ loại server khác cũng được.

Hiện tại, mình đang sử dụng script này để sao lưu dữ liệu hàng ngày và upload lên Google Drive với Rclone.

Hướng dẫn tự động sao lưu toàn bộ VPS

1. Tạo bash script backup

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

nano /root/backup.sh

Tham khảo thêm hướng dẫn sử dụng nano nếu chưa biết dùng.

– Copy toàn bộ nội dung script bên dưới rồi paste vào.
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 1: Áp dụng cho HocVPS Script v2.0 trở lên:

# HocVPS Script Plugin - Backup Server

#!/bin/bash

. /etc/hocvps/scripts.conf

SERVER_NAME=VPS

TIMESTAMP=$(date +"%Y-%m-%d_%H-%M")
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 '';

echo "Starting Compress Files";
zip -r /root/backup/$SERVER_NAME-$TIMESTAMP.zip $BACKUP_DIR -q
rm -rf $BACKUP_DIR
size=$(ls -lah /root/backup/$SERVER_NAME-$TIMESTAMP.zip | awk '{ print $5}')
echo "Finished";
echo '';

#Remove older backups (14 days)
find /root/backup/ -mindepth 1 -mtime +14 -delete

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

# HocVPS Script Plugin - Backup Server

#!/bin/bash

. /etc/hocvps/scripts.conf

SERVER_NAME=VPS

TIMESTAMP=$(date +"%Y-%m-%d_%H-%M")
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 '';

echo "Starting Compress Files";
zip -r /root/backup/$SERVER_NAME-$TIMESTAMP.zip $BACKUP_DIR -q
rm -rf $BACKUP_DIR
size=$(ls -lah /root/backup/$SERVER_NAME-$TIMESTAMP.zip | awk '{ print $5}')
echo "Finished";
echo '';

#Remove older backups (14 days)
find /root/backup/ -mindepth 1 -mtime +14 -delete

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


Giải thích thêm:

  • Tên file backup được tự động đặt theo ngày giờ hiện tại.
  • MYSQL_USER mặc định là root, password được lấy trong file cấu hình /etc/hocvps/scripts.conf.

– 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

Xong, kiểm tra trong thư mục /root/backup/ có file backup .ZIP chưa nhé.

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

Trong bài tiếp theo, mình sẽ hướng dẫn các bạn cách tự động upload file backup này lên Google Drive để tiết kiệm dung lượng cho VPS. Nhớ đón đọc nhé.

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.

155 Comments

  1. Lê Thịnh 25 comment

    Sao cùng 1 VPS site backup đc site không nhỉ, mỗi lần backup cũng tùy hứng lúc site này lúc site kia, có phải do up lâu nên nó ko up hết lên đc ko ad nhỉ.

    1. Việt Phương Moderator

      Script này có up đâu bạn, lưu trong VPS bạn mà
      Hệ thống yếu quá có thể ảnh hưởng quá trình nén toàn bộ. Tuy vậy, bạn backup thủ công gặp thông báo gì?

      1. Lê Thịnh 25 comment

        Sorry mình comment nhầm bài. Mình dùng Rclone – Backup toàn bộ VPS lên Google Drive. Backup ko thông báo lỗi gì, backup đc và hiện dung lượng nhưng khi up lên drive thì site đc site không.

          1. Lê Thịnh 25 comment

            [root@banthoviet home]# /root/backup-data.sh
            Starting Backup Website
            – domain1
            – domain..

            Finished

            Starting Uploading Backup
            Finished

            Total 529M, 1 minutes and 45 seconds elapsed.

            Nó chỉ hiện thế này thôi bạn.

          2. Việt Phương Moderator

            Như vậy nó backup 529MB. Bạn kiểm tra đã đủ dung lượng toàn bộ backup cũng như so với bản trên drive

          3. Việt Phương Moderator

            Vậy bạn up thủ công bằng lệnh rclone lên xem sao. Có thể là do giới hạn của Cloud

  2. GiaHT 6 comment

    hi Hocvps
    Không hiểu sao gần 2 tuần gần đây VPS của mình bị chặn không cho tải bất kỳ plugins hay theme nào từ wordpress.
    Không biết hocvps có chức năng nào chặn không? Nếu có hướng dẫn mình tắt với nhé
    Bên VPS báo không chặn gì cả.
    “An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.”
    Hình lỗi như sau http://prntscr.com/k5vtzw
    Xin cám ơn!

    1. Việt Phương Moderator

      HocVPS cũng không có cấu hình gì chặn 1 trang web bất kì. Bạn kiểm tra lại các thiết lập của mình nhé
      Bạn ping được wordpress.org từ VPs không

          1. GiaHT 6 comment

            Hi Việt Phương

            mình có gửi mail lúc sáng, bạn kiểm tra giúp mình nhé.

            Cám ơn bạn đã giúp!

          2. Việt Phương Moderator

            Note cho mọi người nhé, việc chèn dòng sau vào wp-config.php là tự chặn kết nối qua HTTP rồi, tương đương chặn kết nối tới WP
            define('WP_HTTP_BLOCK_EXTERNAL', true);

  3. Nhat Anh 2 comment

    Xin chào ạ, vậy em muốn restore bản backup này sang 1 VPS mới thì em nên tham khảo bài nào ạ.

      1. TRI LE 19 comment

        Bạn có thể hướng dẫn Restore kỹ hơn phần này không? Phần database có 2 file tenmien.gz và wordpress.gz mà không biết import như thế nào?
        Cảm ơn nhiều.
        Hoặc có công cụ nào backup và restore cả vps nhanh gọn không? trả phí cũng dc.

  4. Thái Đức Khánh 2 comment

    Mấy VPS trước lúc mình cài hocvps xong up file .tgz lên giải nén bình thường, sáng nay mình có vps mới cũng cài VPS mà giải nén file .tgz ở mục filemanager nó cứ báo lỗi extract-failure và giải nén ra thiếu file là sao ad nhỉ

  5. Khuê 1 comment

    Cho mình hỏi chút là, mình muốn backup 1 website thành 1 file .zip thì chỉnh đoạn script như nào ạ

    1. Việt Phương Moderator

      Script đang thực hiện như vậy mà, mỗi website là 1 file zip chứ không phải toàn bộ các website vào 1 file zip
      Còn nếu bạn chỉ muốn backup 1 website thì bạn điền thằng tên website vào trong script, không phải dùng biến $domain nữa

  6. Sơn Khiếu 33 comment

    Cho mình hỏi file này là file nào
    . /etc/hocvps/scripts.conf

    Mình dùng Centos-Web Panel. Chưa biết điền chỗ này ra sao.

    1. Việt Phương Moderator

      File ý lưu thông tin đăng nhập MySQL. Bạn không dùng HocVPs thì xóa dòng ý đi cũng được. Đồng thời điền luôn thông tin đăng nhập MySQL vào trong nội dung script

      1. Sơn Khiếu 33 comment

        Cảm ơn bạn. Mình đã cài và cấu hình xong. Mọi thứ chạy OK. hết 15GB google drive thì thếm 45k/ tháng cũng ngon.

  7. NGUYEN THAI HIEN 10 comment

    CHO MÌNH XIN CỤ THỂ CÁCH CHẠY 2 LỆNH NÀY VỚI. VÀ, NẾU MÌNH MUỐN TẢI FILE BACKUP ĐÓ VỀ THÌ LÀM NHƯ THẾ NÀO NỮA? CẢM ƠN 😉

    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”
    Xong, kiểm tra trong thư mục “/root/backup/” có file backup .ZIP chưa nhé.

    1. Việt Phương Moderator

      Như nguyên văn thôi, lệnh thì /root/backup.sh còn nội dung lưu trong /root/backup/
      Còn bạn muốn kiểm tra nội dung thư mục thì đọc tổng quan bài này cho sau dễ dùng nhé
      https://hocvps.com/lenh-ssh-thong-dung-nhat/
      File backup vẫn ở trong VPS chứ có ở chỗ khác đâu mà cần up/dowwn bạn. Chỉ cần duy chuyển và giải nén thôi

    1. Việt Phương Moderator

      Sai pass root MySQL, thường gặp do đã thay đổi pass root. Bạn kiểm tra file /etc/hocvps/scripts.conf có chưa mật khẩu root, nếu không đăng nhập được bằng mk trong đó thì bạn cần update lại mật khẩu root vào file đó. Bạn dùng script bản gì

      1. dat nv 4 comment

        Mình dùng bản v.2.0.2 Pass của mình lấy trong file /etc/hocvps/scripts.conf vẫn đăng nhập được. Root của database

          1. dat nv 4 comment

            2 pass này trùng nhau: bởi vì mình ko sửa gì cả vẫn để mặc định. có cách nào tự fix cứng pass vào file backup.sh mà ko cần phải đọc file config ko bạn?

          2. Việt Phương Moderator

            Bạn dùng script 2 ý, điền pass vào trong nội dung script luôn

      2. dat nv 4 comment

        bạn expand cái script ra luôn cho mọi người dễ nhìn. Mình ko biết là có cái đó. 😀 cảm ơn bạn!

  8. Tạp chí Khỏe 22 comment

    Chào bạn. Nếu mình chỉ muốn backup database (Mysql) thì lược bỏ đoạn nào được bạn
    Cảm ơn bạn !

    1. Việt Phương Moderator

      Bạn bỏ phần
      echo "Starting Backup Website";
      ....
      echo "Starting Backup Nginx Configuration";
      cp -r /etc/nginx/conf.d/ $BACKUP_DIR/nginx/
      echo "Finished";
      echo '';

  9. Quy 15 comment

    Cho mình hỏi backup xong cứ download dc 120mb thì nó ngưng 🙁 dùng trên nhiều trình duyệt vẫn thế, ai biết giúp dc ko ạ!

    1. Việt Phương Moderator

      Có thể tốc độ giữa VPS và bạn chậm quá nên quá thời gian truy vấn, dạng request timeout. Bạn chỉnh thông số trong /etc/php.d/00-hocvps-custom.ini nhé

  10. Mến 5 comment

    Mong ad giúp với … minh đã làm đi làm lại mấy làn rồi như vẫn bị lỗi như thế này: Khi mình chạy lệnh /root/backup.sh … Nó cứ hỏi Pass như thế này.

    Starting Backup Database
    Enter password:

    Mình nhập pass ko được bấm Enter luôn.. Thì nó thông báo lỗi như thế này:

    Starting Backup Database
    Enter password:
    ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
    Finished

    >>> Các mục Backup còn lại thì bình thường … Chỉ lỗi mỗi cái Database … fix lỗi nó như thế này đây ad 🙁

    1. Việt Phương Moderator

      Chắc bạn dùng script backup lệch với phiên bản của hocvps script. Bạn dùng Script Backup bản 1.8 rồi điền trực tiếp user, password MySQL trong nội dung script. Sau đó bạn lưu script lại và chạy

    1. Việt Phương Moderator

      1. HocVPS script bạn phiên bản nào?
      2. Backup script bạn phiên bản nào?
      Thực ra cách fix đơn giản nhất là bạn dùng backup script bản 1.8 trở xuống, điền trực tiếp mật khẩu mysql root vào trong nội dung của script
      MYSQL_USER="root"
      MYSQL=/usr/bin/mysql
      MYSQL_PASSWORD=$mariadbpass

  11. nguyễn hong 4 comment

    script này lỗi phần nhập password backup database nhé, mặc dù đánh đúng khi lấy ra tại hình /etc/hocvps/scripts.conf.
    mà nó cứ hiện như thế này hoài
    Starting Backup Database
    Enter password:
    Enter password:

    1. Việt Phương Moderator

      Có phải nhập đâu bạn? Password đã được đọc từ trong script rồi mà

      1. Hai 21 comment

        Của mình nó cũng bắt nhập nha. Chả biết nhập pass root hay admin nữa

        1. Việt Phương Moderator

          Bạn thông cảm update lại script nhé. Mình vừa sửa cho phù hợp phiên bản.

  12. Vi Nguyen 2 comment

    Code chạy rất trơn tru, rất tuyệt vời. Nhưng mình vào kiểm tra thì không thấy nó backup database bạn nhỉ?

  13. Duy Vũ 10 comment

    Lúc chạy lệnh backup xong nó bắt nhập pass word database thì nhập cái gì a nhỉ?

    e nhập pass của root vào mà đâu có được.

    1. Việt Phương Moderator

      Bạn dùng HocVPS phiên bản nào? Nếu phiên bản mới nhất thì mình vừa sửa script cho phù hợp, bạn update lại nội dung cho phù hợp nhé

  14. Thanh Hải 14 comment

    anh ơi em bị lỗi như này là sao anh nhỉ

    [root@li1471-240 home]# /root/backup.sh
    /root/backup.sh: line 2: $’\r’: command not found
    /root/backup.sh: line 4: $’\r’: command not found
    : No such file or directorytc/hocvps/scripts.conf
    /root/backup.sh: line 6: $’\r’: command not found
    /root/backup.sh: line 8: $’\r’: command not found
    /root/backup.sh: line 16: $’\r’: command not found
    /root/backup.sh: line 18: $’\r’: command not found
    Starting Backup Database
    /root/backup.sh: line 19: $’\r’: command not found
    : No such file or directoryusr/bin/mysql
    /root/backup.sh: line 21: $’\r’: command not found
    /root/backup.sh: line 22: syntax error near unexpected token `$’do\r”
    ‘root/backup.sh: line 22: `for db in $databases; do
    [root@li1471-240 home]#

    1. Việt Phương Moderator

      Việc copy của bạn khiến tạo kí tự thừa trong scripr rồi. Bạn copy lại toàn bộ script trên nền SSH nhé. Và bạn dùng đúng script cho phiên bản v2.0 trở lên hoặc v1.8 trở xuống chưa

          1. Thanh Hải 14 comment

            vâng, cảm ơn anh nhiều,

            à, anh có thể tạo file đính kèm để tránh các trường hợp như của em anh nhé 😀

            chúc anh 1 ngày vui vẻ

          2. Việt Phương Moderator

            Thôi, cho các bạn làm nhiều cho quen 😀 Dùng VPS cần tìm tòi hơn Hosting 😀 Thế mới thuần thục đc

  15. Tung 5 comment

    Phần backup mình thấy hocvps Compress Files dạng zip chạy rất lâu, host mình khoảng 10GB data (code + images) mà chờ cả 30p ko thấy xong, nên đành phải thoát ra.

    Mình thay lệnh zip bằng lệnh tar thì chạy rất nhanh.

    1. Việt Phương Moderator

      Well noted 🙂 Để mình nghiên cứu xem áp dụng. Do zip cũng phổ thông hơn với mọi người dùng, tiện cho ai cơ bản cũng unzip đc 😀

  16. sven 36 comment

    lúc nào rảnh bạn làm 1 bài nhé
    mình xem mấy bài trên mạng thấy khá khó hiểu 😀
    thanks

  17. sven 36 comment

    em vừa mới cài học vps nhưng mà cài xong rồi thì chưa biết làm bài nào tiếp theo
    bởi vì nhiều bài quá loạn hết cả
    anh chỉ em đi từ bài nào đến bài nào với T_T

    1. Việt Phương Moderator

      Cài HocVPS là xong, bạn không cần cải thiện gì thêm cho HocVPS cả. Bạn chỉ cần sử dụng tiếp thôi là OK. Cài đặt site vào và sử dụng thôi:)

        1. Việt Phương Moderator

          Không có đề cập rồi bạn. Bạn đọc thêm các tài liệu về Linux trên mạng vậy. Còn user quyền root thì bạn tìm hiểu về sudoer

  18. Trường 5 comment

    Trường hợp data của mình khá lớn khoảng 7gb dữ liệu nếu chưa nén thì để auto backup thì khả năng có xảy ra hiện tượng down vps không?

      1. Trường 5 comment

        Ý mính muốn hỏi là data nặng vậy khi backup nó có làm quá tải ram hoặc cpu dẫn đến website load rất chậm ở thời điểm backup không ấy? Mình đang dùng gói 4GB Ram, 2CPU và 60GB ổ cứng tại Vurlt

        1. Việt Phương Moderator

          Cấu hình đó OK bạn à. Bạn test thủ công /root/backup.sh cũng sẽ ước chừng được hệ thống lúc backup

    1. Việt Phương Moderator

      Giờ của hệ thống bạn à. Bạn check bằng date hoặc clock là biết giờ hiện tại

  19. Vannguyen 29 comment

    Tại mình ngại đăng nhập ssh vì lâu và tốn thời gian. Trong khi ở chỗ dashroad của wp có mục xuất nhập dữ liệu, nếu chỉ sao lưu bằng mục đó có ổn không?

    Câu hỏi nữa, tại sao ko lưu bản back up vào máy tính vậy, mình muốn lưu vào máy tính, tuần chỉ sao 1 lần hoặc khi đăng bài mới. Vậy thì xem bài nào.

    Những gì bạn hướng dẫn ở trên là làm trên ssh phải ko hay trên ftp bạn ko nói rõ

    1. Việt Phương Moderator

      _Bạn không đăng nhập thì bạn thiết lập tự động như hướng dẫn thôi, chứ không có cách nào vừa không cài tự động lại tự động backup hàng ngày cả.
      Ngoài ra, bản thân WP cũng có các plugin hỗ trợ như Duplicator. Tuy vậy, việc backup thường xuyên bằng plugin gây tốn tài nguyên hơn việc backup ngay trên server. Cũng như script hoạt động để cho mọi website, không riêng gì mã nguồn WP.
      _Các dòng lệnh chạy ở SSH nhé bạn. FTP không chạy được dòng lệnh mà dùng quản lý file thôi. Bạn có thể dùng sFTP hoặc FTP để down về hoặc tải lên Drive như hướng dẫn https://hocvps.com/rclone/

      1. Vannguyen 29 comment

        Phiền bạn cho mình hỏi thêm câu dài dòng nữa, mình mua thêm 1 VPS Vultr theo hướng dẫn của web bạn rồi chạy hocvps, trên vultr có mục bỏ thêm 1$ thì nó back up tự động cho (nếu xài cái này thì không cần làm các bước như của bạn trong bài này phải không)

        Và các file back up tự động của vultr nó lưu ở đâu, mình cứ để ở đó hay phải copy đưa về máy tính? Có khi nào vps nó bay hết sạch mà không thể vào lấy được các file back up đó không? Theo mình hiểu thì khi backup có 2 phần, 1 là nó sao code (giao diện và mọi thứ khung cố định) + bài viết, ảnh, comment (phần động). Cái backup tự động của vultr nó sao cả hai cái hay chỉ cái phần data động thôi vậy bạn?

        1. Việt Phương Moderator

          Backup của Vultr là backup cả VPS bạn nhé. Còn các script backup website, database thôi. Giống như bạn lưu cả Windows hay chỉ lưu phần mềm trong Windows vậy.
          Còn website gồm 2 phần, data và database thôi. Data như ảnh, plugin các thứ thì nằm hết trong thư mục web rồi. Các mục, nội dung, cmt thì trong database rồi

          1. Vannguyen 29 comment

            Vậy 1 cái VPS của mình để back up tự động 1$/tháng thì vào đâu để lưu cái file đó lại hả bạn?

            Còn 1 cái VPS khác thì mình muốn tự back up. Từ trưa đến giờ đăng nhập vào ssh không nổi nên mình không muốn back up tí nào, xài Puty không được, sang Bit cũng ko xong. Nó cứ báo lỗi không truy cập được mà ko rõ vì sao

          2. Việt Phương Moderator

            _Lưu ngay trên hệ thống của Vultr bạn nhé. Nó như bản ghost thôi. Và hình như cũng k có down về mà lưu trên đó, restore lại cũng trên hệ thống Vultr
            _Vấn đề dưới là do connect của bạn và VPS chứ đâu liên quan backup nhỉ? Bạn kết nối trên web console của Vultr bình thường chứ (tránh trg hợp VPS đã bị tắt). Ngoài ra, bạn kiểm tra port SSH, user, mật khẩu

  20. Vannguyen 29 comment

    Mình tìm đọc nhiều bài về vấn đề này hôm nay và nghiên cứu bài của bạn thì thấy để back up dữ liệu web sau khi cài những thứ kia, hàng ngày vẫn phải đăng nhập vào ssh để back up thủ công hả bạn, nếu mình ko làm bước tự động phía dưới

    Vậy còn cái mục sao lưu trong admin wp thì khi nào cần xài nó, tại sao lại ko xài vậy

    1. Việt Phương Moderator

      _Nếu bạn không làm tự động cronjob thì bạn làm thủ công hàng ngày nhé, lênh /root/backup.sh
      _Backup cả thư mục web, bao gồm cả wp-admin rồi mà bạn. Trong bài viết có đề cập sao lưu gì trong admin wp đâu?

    1. Việt Phương Moderator

      Bạn sửa crontab thành 0 2 * * 1 /root/backup.sh > /dev/null 2>&1 sẽ tự động backup vào thứ 2 hàng tuần

  21. Fususu 35 comment

    Em phải cài cái dos2unix mới chạy được lệnh /root/backup.sh
    Chạy xong thành công nó báo dung lượng file backup 3.5gb
    Kiểm tra trong serverinfo thì thấy mất dung lượng tầm 3.5gb thật.
    song ra thư mục root/backup/ thì chẳng thấy file nào cả.
    chỉ có mỗi thư mục rỗng 2017-01-09_15-50/mysql
    không hiểu nó lưu file ở đâu nhỉ các bác ^^!

    —–
    /root/backup.sh
    Starting Backup Database
    Finished

    Starting Backup Website
    – mrsusu.com
    Finished

    Starting Backup Nginx Configuration
    Finished

    Starting Compress Files
    Finished

    Total 3.5G, 3 minutes and 9 seconds elapsed.

    1. Fususu 35 comment

      À mà em muốn khi backup thì exclude một vài thư mục không cần thiết cho file backup nó nhẹ hơn thì làm thế nào ạ?

      1. Việt Phương Moderator

        Database, Nginx thì toàn file rồi. Backup website có đoạn exclude cache đó
        Bạn thêm thư mục cần bỏ nhé: zip -r $BACKUP_DIR/$domain.zip /home/$domain/public_html/ -q -x /home/$domain/public_html/wp-content/cache/**\* #Exclude cache

    2. Việt Phương Moderator

      Tất cả dữ liệu sẽ được nén lại thành một file .ZIP và để ở thư mục /root/backup/, đồng thời tự động xóa những file backup cũ, chỉ giữ lại những file trong vòng 14 ngày trở lại.

  22. Tuan Van Duong 1 comment

    Hi bạn, script này dùng đc trong Windows Server không vậy? Mình muốn tạo script tương tự vậy nhưng dùng với IIS, ASP.Net projects và MS Sql Server. Mình search google thì người ta kêu dùng SQL Server Agent. Thanks.

  23. Nam Luu 21 comment

    Mình đang bị báo lỗi “ERROR 1018 (HY000) at line 1: Can’t read dir of ‘.’ (errno: 24)” ở file .sh trên.

    Cho mình xin cách khắc phục với

  24. tu 52 comment

    khi có file Backup rồi, mình restore như nào vậy 🙂 mình tải file Backup về và giải nén trên máy thấy có :
    – 1 folder là mysql, trong này có các file nen duôi .gz và mình thử import và database nhưng không được,
    – 1 đống file zip theo tên miền chắc là file code của web đúng không. giả sử mình muốn
    Giả sử mình mua 1 VPS mới và cài lại từ đầu (cả VPS cũ và mới đều dùng script hocvps) thì mình restore như nào

    1. Luân Trần Admin

      File trong thư mục mysql là database, mỗi database một file nén .gz
      File zip theo tên miền là code, bạn giải nén rồi up lên server hoặc up nguyên file nén rồi giải nén trên server.

  25. Hai Nguyen ITmta 2 comment

    Chào Luân !
    Luân cho mình hỏi , sắp tới mình sẽ quản lý 2 con Cloud-Vps 1 con 8G và 1 con 1G. Mục đích là chia làm nhiều host chưa các website. Vậy quản lý Cloud-Vps có điều gì khác biệt không ? Bạn có bài viết hướng dẫn cụ thể cho mình xin link với. Cảm ơn bạn 1

    1. Dinh Le Giang 51 comment

      Hocscript không có chia host được đâu. Bạn có thể tham khảo Sentora và Vesta, 2 cái này free nhưng cũng hiệu quả lắm.

      Còn có nhiều tiền thì xài Direct Admin, chia vô đối đi

  26. siel le 1 comment

    web này Anh Luân Trần quản lý luôn ah, Mình cũng tập tành sử dụng VPS rất thích cách viết bài của anh đơn giản dể hiểu.

  27. Tien 9 comment

    Chào anh, em làm như trên và đang dùng hocvps nhưng lỗi như sau: anh hướng dẫn em chỉnh lại nha anh 😀

    Cảm ơn anh

    [root@sv1 ~]# /root/backup.sh
    : 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. tran hung 50 comment

          Bạn phải cài đặt thêm dos2unix bằng lệnh
          sudo yum install dos2unix
          rồi chạy lệnh
          dos2unix /root/backup.sh
          Thì mới có thể chạy /root/backup.sh được

    1. Minh Trym 1 comment

      [root@sv1 ~]# /root/backup.sh
      – câu lệnh này chạy sai ngay từ đầu nè: phải là “./ /root/backup.sh” hoặc “sh /root.backup.sh”
      nhớ bỏ dấu ngoặc kép đi.

      – : No such file or directorytc/hocvps/scripts.conf
      Cái này là thông báo lỗi không tìm đc file này, mục đích truy xuất file này là để lấy đc password root của mysql, từ đấy mới chạy được đoạn script extract và zip DB

      – : No such file or directoryusr/bin/mysql
      Cái này xem lại dịch vụ mysql đã chạy chưa ?

  28. tran hung 50 comment

    Mình cũng làm các bước theo hướng dẫn, nhưng phải cài đặt thêm dos2unix
    bằng lệnh
    sudo yum install dos2unix
    rồi chạy lệnh
    dos2unix /root/backup.sh
    Thì mới có thể chạy /root/backup.sh được

  29. tran hung 50 comment

    Mình có thể tạo backup các cài đặt spinxsearch, vardish, mount, nói chung là các cài đặt mà mình đã cài khi setup 1 vps mới không?

  30. Quách Chí Cường 7 comment

    He anh Luân,

    Anh nên để phần lưu ý khi sử dụng script này là:
    – Không nên sử dụng khi server/vps của bạn có dung lượng mã nguồn quá lớn.

    Vì cơ chế ‘zip’ backup mã nguồn directory /home , là nén full và không có cơ chế level compress để giảm dung lượng xuống.

    Về phần backup mã nguồn, nếu user ko có nhu cầu download source backup thì nên sử dụng cơ chế ‘increamental backup’, bằng cách này sẽ tiết kiệm dung lượng ổ cứng khá nhiều khi sử dụng tính năng copy hard link inode các file qua các bản backup từng ngày.

    1. Luân Trần Admin

      Okie cảm ơn em. Code này chỉ là basic thôi, để mọi người dễ làm theo nhất. Còn advanced hơn thì phải chỉnh sửa nhiều.

  31. Thế 5 comment

    Hi a Luân,

    Cảm ơn bài hướng dẫn của anh, trước giờ em hay dùng BackWPup rồi up lên dropbox. Giờ dùng cách này sẽ ko cần phải cài plugin sẽ nhẹ site hơn. Em mới tìm hiểu VPS, giò muốn restore lại bản backup đó thì làm như thế nào anh? nếu có bài hướng dẫn restore lại ở 1 VPS khác thì hay quá, vì đôi khi mình chuyển VPS qua nhà cung cấp khác hoặc do IP của VPS đó trước đây đc cấp cho 1 ng khác, họ trỏ domain của họ về IP đó rồi, nhưng giờ không dùng domain đó nữa, như vậy IP đó đc 2 domain trỏ về (1 của mình và 1 của ng khác) nên sẽ gây ra duplicate content, ko tốt cho SEO. Em bị 1 trường hợp như vậy và muốn move hết content từ VPS cũ qua 1 VPS mới, nhưng chưa biết restore bản backup như thế nào. Mong anh có 1 bài hướng dẫn. Cảm ơn anh.

    1. Luân Trần Admin

      Khi restore thì bạn thao tác từng cái một thôi. Có file backup database .SQL thì import vào.
      File nén website thì up lên rồi giải nén hoặc giải nén rồi up lên server.

  32. Hanh Pham 39 comment

    VPS mình dung lượng 20G.
    Mình dùng hết 15G rồi còn free có 5G thì ko thể backup được toàn bộ website trên VPS dùng Script này được đúng ko Luân?

    1. Luân Trần Admin

      Tùy xem thư mục dữ liệu public_html của bạn có nhiều không?
      Sử dụng lệnh du -sh /home/domain.com/public_html/

      1. Hanh Pham 39 comment

        Của mình nặng chủ yếu là do SQL thôi Luân.
        Chứ code thì nhẹ.
        Trong quá trình chạy script nếu full bộ nhớ thì sao hả Luân?

        1. Luân Trần Admin

          SQL thì đơn giản, toàn text thôi nên sau khi nén lại dung lượng không lớn đâu.
          Full bộ nhớ thì mình không rõ, chưa gặp nữa.

  33. Joshua Pham 8 comment

    Luân ơi cho mình hỏi mình đang xài VPS của vultr và sử dụng Sentora để quản lý VPS. Không biết có dùng cách này để back up VPS được không?

    1. Luân Trần Admin

      Dùng được nhé, nhưng bạn phải tự điều chỉnh lại password root MySQL, đường dẫn chứa code, đường dẫn cấu hình Apache… chứ không dùng thẳng được.

        1. Luân Trần Admin

          Vụ này bạn tự tìm hiểu thôi, mình comment rất kỹ nội dung script backup rồi.