[Shell script] Script tự động backup Source Code & Database


Source code và database là 2 thứ cực kỳ quan trọng của 1 website. Vì vậy cần có 1 giải pháp tự động backup hàng ngày là cần thiết để đảm bảo nếu có sự cố xảy ra thì chúng ta hoàn toàn có thể khôi phục lại.

Script tự động backup

Đoạn script sau đây (sử dụng Shell Script) sẽ thực hiện công việc tự động backup Source Code và Database (MySQL/MariaDB) hàng ngày trên Linux Server sử dụng Cron Job.

Tạo 1 script backup có đường dẫn: /opt/scripts/backup.sh

#! /bin/sh

# get today in format Ymd
TODAY=$(date +"%Y%m%d")
DB_NAME=<database_name>
DB_USER=<database_user>
SITE='vinasupport'

# command for backup
cd /opt/backup
mysqldump -u ${DB_USER} --single-transaction --quick --lock-tables=false ${DB_NAME} | gzip  > ${DB_NAME}-${TODAY}.sql.gz
zip -r ${SITE}-${TODAY}.zip /opt/www/vinasupport/ > /dev/null 2>&1

Với:

  • /opt/backup là thư mục lưu trữ các bản backup
  • /opt/www/vinasupport là thư mục lưu trữ source code của website
  • <database_name> là tên của CSDL
  • <database_user> là tên của User của MySQL/MariaDB Database

Phân quyền cho script backup

sudo chmod +x /opt/scripts/backup.sh

Đoạn script ở trên ở lệnh mysqldump mình không sử dụng tham số -p để tránh đặt password trong script và cảnh bảo khi thực hiện lệnh mysqldump. Thay vào đó, mình setting username + password vào file config my.conf của MySQL/MariaDB.

Mở file /etc/my.conf, tìm đển đoạn [mysqldump] và thêm các tham số userpassword của MySQL/MariaDB vào sau:

[mysqldump]
user=<database_user>
password=<password>

Restart lại dịch vụ MySQL/MariaDB để nhận config mới.

Thiết lập Cron Job để tự động backup hàng ngày

Thực hiện command crontab -e trên server để thiết lập 1 job tự động backup hàng ngày

# m h  dom mon dow   command
0 0 * * * /opt/scripts/backup.sh >/dev/null 2>&1

Đoạn script sẽ tự động được chạy bởi Cron Job lúc 00:00 hàng ngày theo múi giờ thiết lập trên server.

Nguồn: vinasupport.com

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web