Ở 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
[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é
Em quên pass root mysql thì lấy lại sao anh, anh viết thêm bài reset pass root mysql đi anh.
Xin lỗi bạn vì giờ mới phản hồi ,mình sẽ viết bài đó sau nhé, cảm ơn bạn đã quan tâm .