Đ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 !
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
Chào Thông,
Nếu server có nhiều database thì cách làm tương tự thôi bạn. Bạn kiếm cái câu lệnh backup và cho nó chạy.
Còn lịch backup dùng lệnh crontab, bạn có thể set time theo bất kỳ kiểu gì mà bạn muốn. Bạn tìm hiểu thêm crontab ở đây nhé https://crontab.guru/
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
Chào bạn,
Bạn nên làm như sau.
1. Bạn nối 2 server bằng cách bạn sử dụng SSH Key.
2. Bạn dùng lệnh sync (https://www.geeksforgeeks.org/sync-command-in-linux-with-examples/#:~:text=sync%20command%20in%20Linux%20is,or%20their%20containing%20file%20systems.&text=Note%3A%20Nothing%20is%20being%20shown,the%20cache%20in%20the%20background.)
Hãy backup theo cơ chế đồng bộ để tiết kiệm dung lượng.
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
Mình dùng script này cho easyengine vps nhưng bị lỗi . Chắc sai đường dẫn Tú nhỉ ?
Chào bạn,
Bạn gặp lỗi gì nhỉ?
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
Chào bạn,
Sử dụng tốt bạn nhé.