Thứ Sáu, 28 tháng 4, 2017

Tự động backup dữ liệu lên Google Drive

Trong bài viết hướng dẫn sử dụng duplicity lần trước, mình đã hướng dẫn các bạn cách để VPS tự động tạo file backup và đẩy lên 1 VPS khác chuyên chứa dữ liệu. Duplicity cũng hỗ trợ đẩy file dữ liệu lên Google Drive, tuy nhiên cấu trúc dữ liệu của file backup tạo ra bởi Duplicity khá đặc biệt nên cách này không hiệu quả lắm.

Hôm nay, mình xin giới thiệu một công cụ mới của tác giả Bach Van Tuan, cho phép VPS sao lưu code, data và đẩy lên server của Google Drive hoàn toàn tự động.

Ưu điểm của Google Drive thì mọi người chắc cũng đã rõ, cho phép lưu tối đa 25GB miễn phí, nếu bạn trả tiền thì chi phí cũng cực kì rẻ so với các nhà cung cấp cloud khác. Ngoài ra, với dung lượng file cho phép upload lên tới 1TB, bạn không bao giờ phải lo lắng về dung lượng file backup nữa.

Thông thường nếu bạn sở hữu server thì việc sao lưu lại các thông tin như cơ sở dữ liệu, tài liệu, photo đuợc upload mỗi ngày khá là cần thiết . Một vấn đề đặt ra là nếu 1 ngày nào đó server của bạn có vấn đề và toàn bộ dữ liệu không thể khôi phục được, ngày đó sẽ là bad day 🙂 , để khắc phục đều đó thì thông thuờng sẽ có 1 server phụ không phục thuộc vào server chính để chứa dữ liệu sao lưu, và trong bài này tôi sẽ huớng dẫn cách để sao lưu dữ liệu tới server phụ đó chính là google drive, server phụ miễn phí của chúng ta 🙂

Mặc định mỗi nguời chỉ có 15gb để lưu trữ( bao gồm gmail, drive, photo ), nếu bạn có nhu cầu cao hơn thì có thể mua thêm dung luợng, có 1 điểm tôi rất thich đó là cho phép upload file với dung luợng tối đa là 1TB, nên bạn không cần lo google sẽ chặn lưu trữ những file backup luôn có dung luợng khá lớn.

Download source code
Đây là tool đuợc viết bằng python nên bạn cần cài đặt google api bằng lệnh sau
Download source code
Đây là tool đuợc viết bằng python nên bạn cần cài đặt google api bằng lệnh sau

Ghi chú: Một số bạn dùng CentOS có thể gặp một số lỗi không mong muốn, Vì vậy để chắc chắn bạn nên cài một số package bằng lệnh bên dưới:

1.Tạo google project

Tiếp theo bạn cần vào google console để tạo mới project và bật drive API, drive SDK
enable drive api
Tiếp theo bạn vào tab credential và click vào button có nhãn là “Create new Client ID”, và ở đây bạn chọn client là service account.
create service account
Sau khi tạo xong thì trình duyệt sẽ tự động tải file private key về máy của bạn, truờng hợp của tôi là file với tên “74214843aee8aba9f11b7825e0a22ef1f06533b7-privatekey.p12”, file này chỉ generate 1 lần , nếu bạn làm mất thì click vào generate new key.
Bạn cũng có thể thấy email service account có dạng như xxxxxxxx-xxxxxxx@developer.gserviceaccount.com
service account

3. Chia sẻ folder của bạn cho google service account :

Từ khi bạn đã có email của service account, bạn vào trang drive của bạn và tạo 1 thư mục để share cho service account với quyền write , bạn cũng có thể share folder sẵn có( khuyên dùng share folder mới tạo vì tool này sẽ có phần xóa các file backup cũ )
share folder
Giờ tiếp theo là lấy folder id đuợc share, bạn có thể để ý url của folder share sẽ có dạng như https://drive.google.com/#folders/0B0XTTQmH9aXreFdxS0txVU5Xb1U nên  id của nó sẽ là 0B0XTTQmH9aXreFdxS0txVU5Xb1U

4. Tạo config file

Tạo vào code và tạo folder với tên gọi dễ nhớ ví dụ “configs”.
Bạn nên copy private key vào folder này cho dễ quản lý luôn, và bạn tạo 1 file với nội dung định dạng json,  bạn có thể tham khảo file your_config.json trong folder configs.example
Nội dung file này có thể như sau:
Bạn định nghĩa một số thông tin như service_account email và path chứa private key, ở đây tôi dùng địa chỉ tương đối, id của folder đuợc share, mô tả cho backup file, và “max_file_in_folder” chính là limit số luợng file trong folder nếu bạn backup file lên và trong folder chứa 6 files, thì file cũ nhất sẽ được xóa, điều này sẽ giúp bạn không bị hết dung luợng trên google drive.

5. Run code

Bạn chạy với cú pháp sau:
Nếu bạn thiết lập moi thứ ok thì backup file sẽ nằm trên folder đã đuợc share trên google drive  bây giờ.

6.  Bash sao lưu dữ liệu mysql

Đây là 1 script kết hợp  với tool trên để backup dữ liệu  mysql tới google drive.
Trong script này bạn khai báo một số thông tin như backup folder, backup code, dbname, db user, db password, tool này sẽ dump dữ liệu mysql của bạn  ra file sql và nén lại thành tar.gz và gửi lên google drive.
sử dụng :

 7. Thiếp lập backup hằng ngày

Bạn dùng crontab để thiết lâp và add line bên duới vào
Tùy vào truờng hợp của bạn mà nhập  /my/backup/repository/backup_mysql.sh cho thích hợp, và nhớ chỉnh mm,hh cho thích hợp.
Và đây là kết quả sau 1 vài lần backup csdl cho domain này
backup result
vì max_file_in_folder trong file config bằng 5 nên trên ảnh trên chỉ xuất hiện 5 file backup.

Backup wordpress site ?

Backup wordpress site cũng sẽ làm tương tự như backup dữ liệu mysql của bạn.
Code như sau:
Bạn cần nhập một sô thông số bên dưới cho phù hợp với site của bạn
BACKUP_TEMP_DIR: có thể là folder trống và bạn có quyền write, đây sẽ là folder tạm để chứa file backup.
BACKUP_CODE: Đường dẫn folder code của mình mà bạn tải về.
BACKUP_CONFIG_FILE : Đường dẫn file mà bạn đặt file config.
Nếu wordpress site của bạn ở đường dẫn /var/www/abc_com
thì bạn điền
PARENT_WORDPRESS_SITE sẽ là /var/www  ( Đây chính là thư mục cha của wordpress site )
SITE_NAME sẽ là abc_com ( Đây chính là phần còn lại )
Tiếp theo là các thông số cho cơ sở dữ liệu, cái này mình sẽ không nói nữa.
Sử dụng:
Tương tự như backup mysql, bạn có thể thiết lập crontab để tự động backup mỗi ngày.

Restore file được backup trước đó

Tính năng này mới được bổ sung, tôi có thêm file restore.py.
Cách sử dụng:
File config vẫn dùng file backup đã sử dụng trước đó.
/restore/path là thư mục sẽ lưu file được tải về.
ví dụ:
Ở ví dụ này tôi sẽ dùng file config abc.com.json và file sẽ được lưu ở thư mục /var/www

restore from google drive

Không có nhận xét nào:

Đăng nhận xét