Backup dữ liệu linux

  • Backup all database
  • Viết Script backup Source và Database
  • Lệnh Dump database.
  • Tạo Cronjob để tự chạy backup

Ở bài viết này mình sẽ hướng dẫn bạn tự viết một script nhỏ để sử dụng Backup Source code và toàn bộ database lại. Mình sẽ chia làm 2 phần là Backup database riêng và Backup mã nguồn riêng, mời bạn cùng mình theo dõi nhé.

Backup all database

Ở đây phần này mình sẽ hướng dẫn bạn chạy lệnh backup database, dump toàn bộ database hoặc một database cụ thể cũng được, và bạn cần thực hiện như sau.

Chỉnh sửa file my.cnf

Bạn sẽ phải thực hiện mở file my.cnf lên, file này thường sẽ nằm trong đường dẫn /etc/my.cnf và thêm vào các dòng sau, Nếu bạn không tìm được file này thì xem ngay bài viết bên dưới để tìm kiếm một file trên Linux

  • Tìm file trên Linux bằng find -name
[mysqldump]
user=root
password=passwd root mysql

Sau khi gán thành công thông tin mysql root, thì bạn dump database hệ thống sẽ bỏ qua không hỏi nhập pass root mysql nữa.

Viết Script backup Source và Database

Bây giờ mình bắt đầu viết một script nhỏ để backup, mình sẽ chú thích script để bạn xem vào và hiểu rõ script nói gì.

  • Đầu tiên bạn truy cập vào thư mục bin trong root
cd /bin
  • Thực hiện tạo mới một file và phân quyền thực thi
touch script-backup.sh && chmod +x script-backup.sh
  • Mở file và bắt đầu viết
vi /bin/script-backup.sh
  • Bắt đầu bạn viết đoạn sau
#!/ bin/bash ## giúp UNIX xác định code sẽ được chạy bằng chương trình nào, ở đây ta sẽ dùng bash

Lệnh Dump database.

Lệnh này sẽ dump toàn bộ database lưu ở định dạng .sql.gz sau đó di chuyển vào thư mục /home/backup

  • File sẽ định dạng như sau: database_linuxcanban-day-month-year.sql.gz
mysqldump -u root --all-databases | gzip > linuxcanban-$(date +%d-%m-%y).sql.gz && yes n | mv linuxcanban-$(date +%d-%m-%y).sql.gz /home/backup/

  • Tiếp đến bạn viết đoạn sau để thiết lập biến
# Thiết lập biến (variables)
backup_folder=$1 ## Thư mục chứa mã nguồn backup
dest_folder=$2 ## Thư mục sẽ lưu file backup


## Thiet lap bien cua file Backup
ngay=$(date +%d-%m-%y)

## File backup se co dinh dang la (DD-MM-YY) Ngay-Thang-Nam
file_name="backup-$ngay"

## Thiet lap bien nay file se co dinh dang la: Backup-DD-MM-YY
echo "Dang tien hanh backup du lieu tai $backup_folder va se duoc gui den $dest_folder"

zip -r $dest_folder/$file_name $backup_folder > /dev/null
echo "Backup Successful!"
echo "File backup: $file_name"
echo "File duoc luu tai: $dest_folder"
ls -la $dest_folder
echo "Full Backup Successful =>> Linuxcanban.com "
  • Dưới đây là toàn bộ Script hoàn chỉnh của mình
#!/bin/bash
#Auth : Anh Quan
echo "Backup Database in Process"
mysqldump -u root --all-databases | gzip > linuxcanban-$(date +%d-%m-%y).sql.gz && yes n | mv linuxcanban-$(date +%d-%m-%y).sql.gz /home/backup/
echo "Database backup Successfull"

# Thiết lập biến (variables)
backup_folder=$1 ## Thư mục chứa mã nguồn backup
dest_folder=$2 ## Thư mục sẽ lưu file backup


## Thiet lap bien cua file Backup
ngay=$(date +%d-%m-%y)

## File backup se co dinh dang la (DD-MM-YY) Ngay-Thang-Nam
file_name="backup-$ngay"

## Thiet lap bien nay file se co dinh dang la: Backup-DD-MM-YY
echo "Dang tien hanh backup du lieu tai $backup_folder va se duoc gui den $dest_folder"

zip -r $dest_folder/$file_name $backup_folder > /dev/null
echo "Backup Successful!"
echo "File backup: $file_name"
echo "File duoc luu tai: $dest_folder"
ls -la $dest_folder
echo "Full Backup Successful =>> Linuxcanban.com "

Tạo Cronjob để tự chạy backup

Để tạo Cronjob bạn gỏ lệnh sau và nhấp chữ i hoặc Insert để chỉnh sửa

crontab -e
0 0 * * * cd /bin && script-backup.sh /home/linuxcanban.com/public_html /home/backup/

Chú thích:

  • 0 0 * * * : Lịch cứ 0h 0p hằng ngày sẽ chạy cron này
  • cd /bin && script-backup.sh : truy cập vào và chạy file
  • /home/linuxcanban.com/public_html : sẽ backup toàn bộ thư mục public_html
  • /home/backup/ : Nơi chứa file backup sau khi backup hoàn tất

Bạn có thể xem trang crontab.guru để tạo lịch nhé

Backup dữ liệu linux