[Script] Hướng dẫn Backup Database trên VPS tự động
Điểm mạnh nhất của VPS là chúng ta có thể toàn quyền thực thi những gì chúng ta muôn. Khỏi phải nói tới tầm quan trọng của việc Backup dữ liệu nữa, trong bài viết này mình sẽ hướng dẫn các bạn cách chúng ta tạo lệnh backup dữ liệu trên VPS bằng một đoạn script đơn giản.
Áp dụng với Server sử dụng Cenos:
Bước 1: Tạo danh sách database cần backup. Đầu tiên bạn tạo ra 1 danh sách các database bạn cần backup. (Bạn có thể tùy biến nó bằng cách tạo ra nhiều file database khác nhau và có thể backup với nhiều thời điểm khác nhau), VD website quan trọng thì daily backup, còn website ít thay đổi dữ liệu thì weekly backup... Đầu tiên bạn chạy dòng lệnh này, nhớ thay chữ MATKHAUPHPMYADMIN bằng mật khẩu phpmyadmin khi bạn cài đặt VPS.mysql --user=root --password=MATKHAUPHPMYADMIN -e "SHOW DATABASES;" | tr -d "| " | grep -v Database > /root/list_DBs.txt
Khi chạy lệnh này, bạn sẽ tạo ra 1 file /root/list_DBs.txt chứa toàn bộ danh sách database có trong VPS của bạn. Bước 2: Tiếp tục chúng ta sẽ tạo ra 1 script chứa câu lệnh backup. Tạo 1 thư mục chứa Database của bạn. mkdir /home/DB/
Tạo script backup toàn bộ database vi /root/backup.sh
Tiếp đến hãy copy đoạn script bên dưới vào file backup.sh Chú ý: Sau khi Copy vào bạn phải sửa lại MATKHAUPHPMYADMIN bằng mật khẩu root của phpmyadmin, cũng như đường dẫn lưu file DBs, ở đây mình ví dụ là /home/DB #!/bin/bash USER="root" PASSWORD="MATKHAUPHPMYADMIN" OUTPUT="/home/DB" rm "$OUTPUT/*gz" > /dev/null 2>&1 databases=`cat /root/list_DBs.txt` for db in $databases; do if [[ "$db" != "information_schema" ]] & [[ "$db" != _* ]] ; then echo "Dumping database: $db" mysqldump --force --opt --user=$USER --password=$PASSWORD --databases $db > $OUTPUT/`date +%Y%m%d`.$db.sql gzip $OUTPUT/`date +%Y%m%d`.$db.sql fi done
Nhấn :wq để lưu lại script trên, chúng ta có file backup.sh Lưu ý: Nếu VPS của bạn cài directadmin, bạn không biết pass mặc định của root là gì, bạn có thể sử dụng lệnh sau để xem cat /usr/local/directadmin/scripts/setup.txt
Bước 3: Kiểm tra xem file này chạy được chưa. Nếu chạy được chúng ta sẽ có các file database trong /home/DB Gõ lệnh: sh /root/script/backup.sh
Nếu không chạy thì gõ lệnh /root/backup.sh
Bước 4: Đặt lịch backup tự động cho VPS. Bây giờ chúng ta sẽ sử dụng crontab có sẵn trong hệ điều hành Linux. Ở trong Ví dụ này Tú sẽ backup hàng ngày và vào lúc 03:15 phút sáng hàng ngày. 15 3 * * 0 sh /root/script/backup.sh
Vậy là xong, chúng ta đã có 1 script chất lượng, tự động backup database mỗi ngày mà không có mất tiền thuê đơn vị cung cấp host backup. Áp dụng với Server sử dụng Ubuntu
Với server chạy ubuntu thì đoạn script trên có thể bị lỗi bash code. Vì thế bạn thay đoạn script trên bằng đoạn script này.#!/bin/bash USER="root" PASSWORD="MATKHAUPHPMYADMIN" BACKUP_PATH="/home/DB" databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database` for db in $databases; do if [[ "$db" != "information_schema" ]] & [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then echo "Dumping database: $db" mysqldump -u $USER -p$PASSWORD --databases $db > $BACKUP_PATH/`date +%Y%m%d`.$db.sql fi done
Với Ubuntu thì để kiểm tra xem backup.sh này có hoạt động hay không, bạn sẽ gõ ./backup.sh
Vậy bạn đã hoàn tất những gì cần làm. Chúc bạn thành công !
Bình luận
9 Bình luận
Trên Centos em muốn đặt lịch tự động Backup Database đến 1 server khác thì làm sao ? Chỉ muốn Backup các file có thay đổi hoặc thêm mới để tránh tăng nhanh dung lưu trữ thì phải làm sao? Mong được chỉ giúp. Cám ơn
Hi Tú Vi dụ server mà có nhiều database như MySQL; PostgreSQL; MariaDB; MongoDB thì mình backup ra sao, và thoi gian backup 0h và 23h thì script như Tú apply được không và sửa ra sao. Thanks
Một số bạn VPS sử dụng DirectAdmin do bên cho thuê VPS họ cài đặt, bạn có thể sử dụng lệnh sau để xem password mặc định cat /usr/local/directadmin/scripts/setup.txt
Em dùng VPSSIM cũng dùng code này được luôn ạ. Em toàn phải 1 tuần vào VPSsim để tạo backup
Mình dùng script này cho easyengine vps nhưng bị lỗi . Chắc sai đường dẫn Tú nhỉ ?