Dù bạn đang vận hành một hệ thống lớn, hay một website nhỏ, thì việc sao lưu dữ liệu cũng là điều vô cùng cần thiết. Như đợt gần đây, VNDirect và một số bên có bị tấn công, khôi phục lại dữ liệu cũng mất khá lâu. Mình không làm bên an ninh mạng và cũng không rõ hệ thống của các bên đấy như nào, bên hack tấn công ra sao, và mã hóa dữ liệu, backup ntn, nên không nói sâu được.
Nhưng cơ bản, nếu có các bản backup định kỳ, thì việc khôi phục dữ liệu, khôi phục hệ thống, khôi phục website sẽ rất đơn giản.
MỘT SỐ GIẢI PHÁP SAO LƯU HỆ THỐNG ĐÃ CÓ
Về backup thì các nhà cung cấp Hosting, VPS, Server đều có rồi, nhưng nhìn chung là … đắt (so với mình =))))). Và có vài cái chỉ take snapshot, backup cả ổ tại 1 thời điểm, nhưng chỉ lưu được vài cái backup thế là hết dung lượng rồi, rồi lại xóa bản cũ, backup bản mới => không tối ưu lắm. Chưa kể, ví dụ hệ thống bị cài backdoor vào đầu năm, nhưng cuối năm bệnh mới phát, thì bản backup gần nhất, ví dụ chỉ có 7 bản, mỗi tuần bạn backup 1 bản => backup kiểu gì cũng dính virus.
Hoặc, Wordpress thì có cả mớ plugin hỗ trợ, ví dụ như UpdraftPlus chẳng hạn, nó cũng tự động up lên google drive, nhưng các plugin đều tạo bản backup hoàn toàn cả website → mỗi bản backup là nguyên website luôn => dung lượng lớn, chậm. Chưa kể nó chạy trên wordpress sẽ làm giảm hiệu năng web khi nó chạy ngầm. Và nó cũng là giải pháp cho wordpress, chứ không phải hệ thống bất kỳ, nếu website bạn không dùng wordpress thì ko cài plugin như trên được.
… ĐI TÌM GIẢI PHÁP PHÙ HỢP HƠN
Vậy thì sao được nhỉ? Làm sao để backup mọi thứ, mà lại tối ưu dung lượng, chi phí, tránh việc backup toàn bộ (Full backup) mỗi lần. Vì nếu backup kiểu đấy, hệ thống của bạn có 1GB thôi, nhưng backup 10 lần là cần 10GB mất rồi, cứ thế nó tăng lên …
Và để giải quyết được performance khi backup, không ảnh hưởng hoặc ít ảnh hưởng tới hệ thống khi backup, thì cần chạy thẳng backup trên server, một tool luôn chứ không chạy qua plugin wordpress. Mình có tìm hiểu thì có vài tool như vậy, và sau khi test tủng mấy cái thì thấy duplicity là phù hợp nhất. Nó hỗ trợ up lên khá nhiều Backend: Google Drive, Dropbox, Amazon S3, FTP, Microsoft Azure, Microsoft Onedrive,… và một mớ thứ khác. Tức là Backup miễn phí cũng chơi được (Google Drive), hay backup lên 1 VPS khác cũng ok (qua FTP, rsync…). Ngoài ra, nó cũng có hỗ trợ đặt mật khẩu cho backup nữa (GPG) - nếu muốn thêm lớp bảo mật cho backup.
INCREMENTAL BACKUP VS FULL BACKUP
Full Backup, như tên gọi của nó thôi, tức là backup mọi thứ mỗi lần chạy sao lưu.
=> Và có một dạng backup là Incremental, tức là backup toàn bộ mọi thứ ở bản đầu tiên, sau đó sẽ gửi các bản backup những gì thay đổi thôi, ở mỗi lần chạy tiếp theo. Thì các bản backup incremental này rất bé, bởi nó chỉ sao lưu những gì bạn thay đổi, xóa cái gì, thêm cái gì thì nó ghi lại thôi.
Do đó, dạng backup này có thể chạy xuyên suốt từ lúc ban đầu, backup full lúc đầu, rồi chạy định kỳ incremental backup tiếp. Như bạn thấy trong ảnh, bản full thì khá nặng, nó chia thành các file nhỏ 200MB (duplicity-full), nhưng bản backup tiếp, nó rất nhỏ (dulicity-inc), có vài bytes (vì mình chạy ngay, lúc đấy đã thay đổi gì đâu, chưa up bài up ảnh gì trên website).
CÁCH BACKUP HỆ THỐNG THEO DẠNG INCREMENTAL
Để backup hệ thống một cách đầy đủ, an toàn nhất, thì bạn cần hiểu hệ thống chạy dựa trên những thành phần nào. Mỗi hệ thống sẽ cần một số các thành phần khác nhau. Ví dụ như Website wordpress, nó sẽ có Database (MySQL), và phần Code PHP (folder Wordpress). Bạn cần backup 2 phần này, code thì nó là cái folder rồi (nhớ chừa folder cache ra, không cần backup làm gì =)))), còn database thì chạy lệnh mysqldump để lấy data, nén nó lại rồi ném vào folder nào đó, sau đó backup là ok.
Ngày mới bắt đầu nghịch web, mình tưởng cái folder của website (còn gọi là root folder, hoặc public_html, kiểu vậy) là toàn bộ dữ liệu của website rồi, copy cái là chuyển được host cơ, không tính tới database. Nên copy mỗi cái folder code, sau chuyển host cái khóc ra tiếng mán, vì thiếu database web chạy được đâu…
Bởi vậy cần hiểu rõ hệ thống chạy trên các thành phần nào. Ví dụ có một số web mình làm chạy database trên MongoDB, thì lại cần backup đúng cái database trên mongodb, chứ không phải mysql.
Và từ biết cần backup phần nào, thì sẽ liệt kê ra, và liệt kê cả phần không backup (cache folder).
Sau đó viết cronjob chạy duplicity, với list các folder cần backup, folder loại trừ. Sử dụng Google Drive thì bạn sẽ cần tạo Service Account bên Console Google. Tạo rất đơn giản thôi!
Nếu bạn muốn thêm bảo mật (password) cho file backup, thì có thể set thêm encrypt-key, sử dụng GPG tạo là được.
BOOM → thế là xong, chạy đơn giản, cũng khá nhẹ nhàng, dung lượng backup tối ưu, và bạn đã có thể thở phào rằng mình có backup cho trường hợp tệ nhất =))))) và nó hoàn toàn tự động, không cần quan tâm lắm, vì dung lượng backup cũng khá tương đồng với dung lượng hệ thống, thỉnh thoảng check lại xem mọi thứ hoạt động ổn không là ok.
DUNG LƯỢNG CỦA GOOGLE DRIVE SẼ HIỂN THỊ KHÔNG ĐÚNG LẮM …
Sau khi Upload bản backup lên Google Drive, mà bạn vẫn thấy dòng: Đã sử dụng 0KB trong tổng số 15GB, thì bạn yên tâm, Google không cho không ai cái gì đâu =)))))) nó không thống kê thôi, chứ up quá 15GB là vẫn báo Exceed Limit đó. Để check chuẩn thì bạn cần request lên API của Google và check lượng sử dụng, nó báo chuẩn như ảnh.
Bạn thấy đấy, ở đây mình backup tầm 8 web, dung lượng tổng tầm 5GB, nó báo hết đó, không có ăn không được của Google đâu =))))
Vì Google Drive free 15GB nên giải pháp tối ưu chi phí là, chia nhỏ các folder cần backup ra, rồi up lên nhiều tài khoản nếu bạn cần backup size lớn, còn web bình thường thì 1GB là nhiều rồi, không cần quan tâm lắm. Hoặc nếu hệ thống lớn thì chi thêm chút chi phí cho Google, mua hẳn 100GB hoặc 2TB luôn.
Tác giả: Hoàng Tuấn - Group Nghiện SEO