Hướng dẫn Backup database mysql hàng ngày 1 cách tự động

19/09/2016

Chắc hẳn khi bạn quản trị VPS thì đến lúc nào đó bạn sẽ có nhu cầu backup toàn bộ cơ sở dữ liệu hàng ngày 1 cách tự động. Khi đó sẽ có 1 số vấn đề sau cần giải quyết:

Nên backup full toàn bộ cơ sở dữ liệu, hay là backup mỗi cơ sở dữ liệu (cho từng website) ra thành 1 file khác nhau
Sẽ xử lý thế nào để xóa các file backup quá cũ (chúng ta chỉ giữ 7 file backup mới nhất trong 1 tuần gần đây của 1 cơ sở dữ liệu)
Thời gian chạy backup..
Hostnaotot đã tự viết một bash shell script để thực hiện việc này, script đó thực hiện các công việc sau:
Tự động đọc tên các cơ sở dữ liệu trong 1 file .txt
Với mỗi cơ sở dữ liệu đó, tự động backup ra 1 file có nén
Tự động xóa các file backup quá cũ (lớn hơn 7 ngày)
Script này vẫn đang được cài đặt và hoạt động tốt. Nay chia sẻ để bạn nào cần thì có thể dùng luôn (script đơn giản thôi nhưng test chạy ngon rồi nên các bạn chỉ việc copy về và chạy là được. Link download tại đây
#!/bin/bash
CURRENT_DIR=/root/backup
MYSQL_DIR=$CURRENT_DIR/mysql
MYSQLUSER=root
MYSQLPASSWORD='yourrootpasswordhere'
TODAY=`date +%d_%m_%Y`
if [ ! -d "$MYSQL_DIR" ]; then
  # Control will enter here if $DIRECTORY doesn't exist.
  mkdir $MYSQL_DIR
fi

while read line
do 
	#echo -e "$line"; 
	mysqldump -u root -p"$MYSQLPASSWORD" $line | gzip >  $MYSQL_DIR/$line.$TODAY.sql.gz;
	sleep 30;
done < $CURRENT_DIR/mysqldb.txt
#delete old files
find $MYSQL_DIR -type f -mtime +7 -exec rm {} \;
Bạn lưu nội dung trên save thành file autobackupmysql.sh, sửa đoạn yourrootpasswordhere thành password user myslq root của bạn, save lại. Rồi tạo thêm 1 file mysqldb.txt trong đó chứa các dbname muốn backup, mỗi dbname trên 1 dòng, ví dụ như sau:
dbname1
dbname2
dbname3
Hoặc bạn có thể download 2 file trong script tự động backup mysql tại đây để tránh typing error, và nhớ sửa lại nội dung của root password cũng như dbname nhé các bạn!
Up 2 file này lên thư mục /root/backup/ (Tạo mới bằng lệnh mkdir nếu chưa có thư mục này), chạy các lệnh sau:
  • chmod +x autobackupmysql.sh #để cho phép run file này
  • ./autobackupmysql.sh #để test
  • Sau khi chạy xong, bạn ls -la sẽ thấy có thư mục mysql, cd vào thư mục này, ls -la tiếp sẽ thấy các file được backup
Cuối cùng, bạn phải tạo crontab để hệ thống tự động chạy autobackupmysql.sh cho bạn hàng ngày:
  • Từ màn hình SSH bạn gõ lệnh: export EDITOR=vi && crontab -e
  • Sau khi máy mở màn hình để edit crontab, bạn dùng bàn phím di chuyển con trỏ đến dòng cuối cùng rồi ấn phím o (phím O, không phải số không) để thêm dòng mới
  • Gõ dòng sau đây để tạo crontab chạy mỗi ngày 1 lần: 10 10 * * * /root/backup/autobackupmysql.sh
  • Ấn Esc, rồi ấn :q và nhấn Enter để save và quit ra khỏi màn hình edit crontab
Để restore lại database đã backup (ví dụ trong trường hợp bạn đổi server), bạn hãy làm theo hướng dẫn trong bài viết Hướng dẫn tiếp theo nhé
Chúc các bạn thành công!