Tự động sao lưu cơ sở dữ liệu

Hôm trước anh có khoe đã chuyển máy chủ sang dùng VPS của Vultr. Chẳng cần đoán thì cũng biết anh dùng để chạy một mớ website cá nhân ngonngu.net, luom.tv, timestudio.vn, rồi là website của bạn bè, người quen, khách hàng. Cứ ping thì biết 😆

VPS anh quản lí chẳng cài phần mềm quản lí hosting nào mà tất cả đều là ssh rồi cấu hình thủ công. Mỗi website anh tạo cơ sở dữ liệu và người dùng cơ sở dữ liệu riêng. Vậy thế thì sao lưu kiểu gì?

Thực ra có giai đoạn anh chẳng sao lưu gì và may mắn là chưa có vấn đề gì lớn. Nhưng ở đời may mắn chỉ là chuyện nhất thời. Không sao lưu rồi sẽ có lúc vỡ mồm. Mà tất nhiên là phải tự động và định kì chứ không phải thủ công nhé, được ba hôm là oải ngay.

Google thì đầy giải pháp. Nhưng cái thời gian để xem và quyết định dùng cái nào thì chẳng thà dùng để tự viết mã kịch bản có khi còn nhanh hơn.

DBS="database1 database2 database3 database100"

cd /home/username/backup/

folder=$(date +"%Y-%m-%d %H-%M-%S")
 
for i in $DBS; do 
        echo "Đang xuất $i";
        mysqldump -p244466666 -B "$i" > "$i.sql"; 
done

echo "Các CSQL đã được xuất"

echo "Giờ thì tạo thư mục"

mkdir "$folder"

mv *.sql "./$folder/"

echo "Gói và nén lại"

tar zcf "$folder.tar.gz" "$folder"

chmod 600 "$folder.tar.gz"

rm -rf "$folder"

echo "XONG!"

echo "Hoàn thành lúc " $(date +"%Y-%m-%d %H:%M:%S") >> log.log

Đại loại là tạo một thư mục ~/backup xong rồi vào đó vim một tập tin có tên là db-backup.sh chẳng hạn với nội dung như trên. Sau đó nhớ chmod 700 để chỉ bạn mới đọc được (để giấu cái một khẩu một hai ba bốn năm sáu kia) và chạy được (tất nhiên). À, nhớ là tài khoản MySQL của bạn phải được quyền đọc tất cả các cơ sở dữ liệu đã được khai tên trong biến DBS. Tốt nhất là grant all on *.* to 'username' cho nhanh :v. Nếu sau này có thêm cơ sở dữ liệu cần sao lưu thì thêm vào biến kia là xong.

Đấy, đoạn mã trên sẽ lần lượt xuất các cơ sở dữ liệu ra, gói và nén (.gz cho nhanh) trước khi xoá các tập tin .sql vừa xuất và cuối cùng là ghi lại thời gian hoàn thành trong tập tin log.log.

Nếu chạy thử đoạn mã mà không có vấn đề gì thì dùng cron để đặt thời gian tự động chạy. Nếu chưa biết dùng cron thì Google. Ví dụ, anh muốn nó chạy hàng ngày vào lúc chính ngọ (theo giờ máy chủ) thì gõ lệnh crontab -e rồi soạn:

0 12 * * * /home/username/backup/db-backup.sh

Thế là cơ sở dữ liệu đã được sao và lưu trên máy chủ. Nhưng thế mới chỉ xong một nửa vì còn phải đưa dữ liệu đó đến một nơi khác mà mình có thể truy cập khi máy chủ lỗi hoặc không truy cập được. Cái này cũng dễ nhưng anh chưa nói ngay vì còn để dành viết bài khác. Nhưng bật mí là anh cũng chỉ dùng phần mềm truyền thống có sẵn trên Linux thôi chứ không cài thêm cái gì đặc biệt.

Một bình luận

  1. […] tiên, anh sẽ phải tự động sao lưu cơ sở dữ liệu trên máy chủ. Giả sử, anh lưu vào thư mục /home/username/backup. Còn DocumentRoot […]

Bình luận

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.