Nếu bạn cần một giải pháp khác tốt hơn là gõ từng câu lệnh thủ công thì ở bài này mình sẽ hướng dẫn các bạn tự viết một Shell script để thực hiện công việc backup để khi nào cần backup, bạn chỉ cần gõ một câu lệnh nào đó mà bạn tự đặt ra thay vì sử dụng các lệnh thủ công. Hơn nữa, cũng trong bài này mình sẽ hướng dẫn bạn cách đưa một Shell script bạn tự viết vào crontab để công việc backup diễn ra hoàn toàn tự động, như backup 1 ngày 1 lần chẳng hạn.

I. Giới thiệu về Shell Script

Shell Script là một ngôn ngữ lập trình kịch bản được thiết kế dành cho môi trường UNIX. Chẳng hạn bạn hay sử dụng các lệnh như cd, unzip,…tất cả lệnh đó đều là Shell script.

Chẳng hạn như bạn cần backup một thư mục nào đó và chuyển file backup đến một thư mục chỉ định, đồng thời xóa các file backup cũ thì nếu bạn tự gõ các lệnh đó thủ công thì bạn sẽ cần gõ khoảng 4, 5 lần. Tuy nhiên với ngôn ngữ Shell, bạn có thể lồng các tác vụ đó vào một file Shell script để khi cần làm việc kia thì bạn chỉ cần gõ một lệnh mà bạn đã đặt ra.

II. Viết Shell script để backup dữ liệu

1.Bắt đầu viết script

Đầu tiên là bạn tạo ra một file với tên backup trong thư mục /bin:

Nhập code sau và sửa theo ý của bạn:

#! /bin/sh

#

ngay=$(date +“%T %d-%m-%Y”)

file_name=“backup-$ngay”

echo

mysqldump single-transaction routines  triggers add-drop-table extended-insert -u TaikhoanMysql -pMtkhuSQL têndatabase | gzip -9 > thưmclưu/db_$(date +“%T %d-%m-%Y”).sql.gz

echo

echo “BACKUP CSDL VA CODE THANH CONG VAO LUC $ngay!”

echo

zip -r Đườngdnlưubackupcode/$file_name  cd /Thưmccnbackups > /dev/null

echo “Ten file CSDL backup: $file_name.sql.gz”

echo “Ten file backup code: $file_name.zip”

echo “File backup da duoc luu tai: Đường dẫn đến file backup”

echo

Ví dụ, ở đây mình sẽ lưu file Code và Database vào thư mục /home/backups nhưng khi backup thư mục home sẽ không bao gồm thư mục /backups để tốn dung lượng, mình sử dụng script như sau:

Thông tin SQL của mình là: user là ‘’root’’, pass là ‘123456’ và database mình cần backup là ‘’testdatabase’’

#! /bin/sh

#

ngay=$(date +“%T %d-%m-%Y”)

file_name=“backup-$ngay”

echo

mysqldump singletransaction routines  triggers adddroptable extendedinsert u root p123456 testdatabase | gzip 9 > /home/backups/db_$(date +“%T %d-%m-%Y”).sql.gz

echo

echo “BACKUP CSDL VA CODE THANH CONG VAO LUC $ngay!”

echo

zip r /home/backups/$file_name  cd /home x “*backups*” > /dev/null

echo “Ten file CSDL backup: $file_name.sql.gz”

echo “Ten file backup code: $file_name.zip”

echo “File backup da duoc luu tai: /home/backups”

echo

Các bạn lưu ý dòng lệnh sau:

cd /home -x “*backups*” : lệnh này là lệnh zip thư mục home nhưng không zip thư mục tên backups ở bên trong thư mục home

Sau đó, bạn lưu lại file và gõ thử lệnh backup để kiểm tra xem script đã hoạt động chưa. Nếu kết quả trả về như dưới đây là script đã hoạt động:

Giải pháp sao lưu dữ liệu miễn phí cho CloudServer update 2020 1

III. Tạo Cron Job để tự backup dữ liệu

Cron Job nghĩa là khái niệm chỉ một hành động nào đó được lặp đi lặp lại theo một chu kỳ nhất định. Ở bài này mình sẽ không giải thích rõ Cron Job là gì nên mình chỉ nói về việc sử dụng Cron Job để máy chủ tự động backup theo chu kỳ nhất định.

Lưu ý: Nên sử dụng tài khoản root để tạo cron.

Để tạo Cron Job, bạn hãy gõ lệnh sau:

Ấn phím i để chuyển qua chế độ Insert và gõ:

0 00 * * 1,4 backup >> /home/backups/backupsreport.txt

Giải pháp sao lưu dữ liệu miễn phí cho CloudServer update 2020 2

Ở đây, dòng crontab được hiểu như sau:

Hệ thống sẽ tự động chạy lệnh backup (Script mà chúng ta vừa viết) vào lúc 12h đêm thứ 2 và thứ 5 hàng tuần và xuất ra file log report được lưu tại:

>> /home/backups/backups-report.txt.

Để kiểm tra xem bạn đã thêm cronjob thành công hay chưa, hãy gõ lệnh xem nội dung của file /var/spool/cron/root:

Nếu nó hiện ra cái cronjob mà bạn vừa thêm thì thành công.

Giải pháp sao lưu dữ liệu miễn phí cho CloudServer update 2020 3

Tips: Bạn có thể sử dụng công cụ Crontab Code Generator để hỗ trợ tạo crontab nhanh và chính xác.

IV. Dùng Cron để tự động xóa file backup cũ

VPS/SERVER của bạn ít dung lượng, bạn sợ các bản backup sẽ làm full ổ đĩa. Đừng lo, hãy thêm một crontab sau để tự động xóa các file backup cũ nhé. Ở đây mình thiết lập tự động xóa các file backup cũ hơn 7 ngày vào 15h hàng ngày, mình dùng crontab như sau:

15 * * * find /home/backups type f mtime +7 exec rm f ;

Hãy chỉnh sửa /home/backups thành thư mục chứa các file backup của bạn.

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

Xem thêm:
dịch vụ seo bất động sản

khóa đào tạo seo web miễn phí

Bài viết cùng chủ đề