Hôm trước đã hướng dẫn cách làm sao để tự động backup Source code và DataBase rồi. Nhưng backup xong vẫn nằm trên VPS đó, trong trường hợp VPS có chuyện thì rất nguy hiểm, mà get về thủ công thì rất lâu với những ai quản trị nhiều site.
Xem bài viết: Tự động backup Database và Source code bằng Crontab
Hôm nay sẽ giải quyết vấn đề là làm thế nào để quẵng tất cả các file backup đó lên Google drive.
I. Tạo google project
1.Vào đây: https://console.developers.google.com/project
Tạo 1 Project mới.
click "Create Project" -> Project name "Nhập tên tùy ý ví dụ: saoluu"
2.Vào đây: https://console.developers.google.com/apis/library
Chọn project vừa tạo -> Overview -> và Enabled: Drive API, Admin SDK, Google Apps Marketplace SDK
3.Tiếp tục chọn tab Credentials.
Add Credentials -> Service account -> Check P12 -> Create
4.Xong thì nhận được 1 file có tên dạng saoluu-5e923c74024b.p12 lưu vào 1 nơi cẩn thận sau này dùng.
Và cài mail: xxxxxxxxxxxx[email protected]
II. Tạo 1 thư mục trên Google Drive và chia sẻ với mail trên.
Bước này đơn giản là tạo 1 thư mục mới trên Google Drive
Chú ý:
- Chia sẻ với mail đã nhận ở trên: xxxxxxxxxxxx–[email protected] và phát quyền được phép chỉnh sửa.
- Link của thư mục có dạng: https://drive.google.com/drive/u/0/folders/0B18aFuiEcupjNVoxSVloY2mwMJU nhớ đoạn đánh dấu màu đỏ, xíu nữa dùng.
III. Thao tác trên VPS.
1.Cài đặt một số Pack cần thiết, mình dùng CentMinMod thấy 2 cái này là đủ
yum -y install python-pip pip install --upgrade google-api-python-client
2.Tải file này về: configs
Giải nén ra được thư mục: configs -> copy file saoluu-5e923c74024b.p12 đã làm ở bước I.4 bỏ vô và edit file config.json với nội dung như sau:
{ "service_account":"xxxxxxxxxxxx-4rl923m4nktdrnks20gudca0j1ldm7mg@developer.gserviceaccount.com", "private_key12_path":"saoluu-5e923c74024b.p12", "backup_folder_id":"0B18aFuiEcupjNVoxSVloY2mwMJU", "description" : "Backup VPS to Google Drive", "max_file_in_folder": 100 }
Giải thích:
- “service_account”: là cái email đã nhận ở bước 1.4
- “private_key12_path”: đường dẫn cái file đã nhận ở bước 1.4 (mới copy vô)
- “backup_folder_id”: là cái đuôi phía sau của url thư mục Google drive đã nhận ở bước II
- “max_file_in_folder”: là số file tối đa của thư mục trên google, ở đây là 100 trong trường hợp nhiều hơn sẽ xóa file cũ nhất.
3. Upload thư mục configs lên /root/ của VPS
Set quyền cho file backup.py trong /root/configs là 755, tức là có quyền thực thi.
Chạy thử:
python /root/configs/backup.py /root/configs/config.json /var/backups/source.zip
Giải thích:
- “/root/configs/backup.py”: nơi chứa file thực thi python
- “/root/configs/config.json”: nơi chứa file cấu hình
- “/var/backups/source.zip”: file muốn đưa lên Google drive
Nếu quá trình chạy hoàn tất và không báo lỗi, kiểm tra trên google drive có file source.zip thì xin chúc mừng.
Trong trường hợp bị lỗi thì thêm mấy anh này vô.
yum update yum groupinstall "Additional Development" "Development tools" yum install libffi-devel pip install pycrypto easy_install pyopenssl
Nếu bị lỗi: No crypto library available thì chạy dòng này:
sudo pip2 install --upgrade --force pip pip install PyOpenSSL
IV: Nâng cao (Hẹn giờ tự động backup, đẩy lên Google drive từ A – Z)
Bài tự động backup thì đã hướng dẫn ở đây: https://tangduongtrieu.com/tu-backup-database-va-source-code-bang-crontab-trong-centminmod/
Nhưng giờ có chỉnh sửa xíu:
1. Tạo file backup.sh trong /root/ và chmod quyền thực thi 755 với nội dung như sau:
#!/bin/bash { printf "subject:Backup for VPS\nfrom:mail_nguoi_gui\n\n" echo "Deleting file Old Backups..." rm -rf /var/backups mkdir /var/backups chmod -R 777 /var/backups mkdir /var/backups/$(date +"%Y-%m-%d")/ mkdir /var/backups/$(date +"%Y-%m-%d")/websitecuaban.com/ echo "Starting backup database for websitecuaban.com..." mysqldump --single-transaction --routines --triggers --add-drop-table --extended-insert -u username_cuaban -h 127.0.0.1 -p'matkhau' database_cuaban | gzip -9 > /var/backups/$(date +"%Y-%m-%d")/websitecuaban.com/websitecuaban_$(date +"%Y-%m-%d").sql.gz echo "Starting backup files for websitecuaban.com..." zip -r /var/backups/$(date +"%Y-%m-%d")/websitecuaban.com/websitecuaban_$(date +"%Y-%m-%d").zip /home/nginx/domains/websitecuaban.com/public echo "Upload To Google Drive" python /root/configs/backup.py /root/configs/config.json /var/backups/$(date +"%Y-%m-%d")/websitecuaban.com/websitecuaban_$(date +"%Y-%m-%d").sql.gz python /root/configs/backup.py /root/configs/config.json /var/backups/$(date +"%Y-%m-%d")/websitecuaban.com/websitecuaban_$(date +"%Y-%m-%d").zip } | /usr/sbin/sendmail "[email protected]"
Thay phần nội dung màu đỏ cho phù hợp với Website của bạn.
Sau khi chạy nếu kiểm tra oke hết thì chuyển đến bước tiếp theo là tự động chạy backup vào 1 ngày định trước.
2. Crontab cho backup.sh
Gõ lệnh
crontab -e
Nhập
@weekly /root/backup.sh
Lưu và thoát
Ctrl + X --> Y --> Enter
Để chắc chắn crontag luôn chạy thì gõ thêm 3 lệnh này nữa.
service crond start service crond restart chkconfig crond on
Done!
Tham khảo và chỉnh sửa từ: https://dethoima.info/tu-dong-backup-du-lieu-len-google-drive/
Gốc của Source thì nằm ở đây: https://github.com/bachvtuan/Backup-To-Google-Drive
Chào bác Tang,
Em download được file key về rồi file kiểu dạng xxxx-privatekey.p12
Nhưng em làm sao để thấy được hay có được email dạng [email protected] ạ
Mong bác chỉ giúp thêm
Bác nói rõ cho em biết
Và cài mail: xxxxxxxxxxxx-4rl923m4nktdrnks20gudca0j1ldm7mg@developer.gserviceaccount.com
là cài như thế nào ạ
Trong phần Service account thì mình chọn cái nào ạ:
Compute Engine default service account hay là
Compute Engine default service account
Mong bác chỉ giúp
File “/root/configs/backup.py”, line 26
print “not allow”
^
SyntaxError: Missing parentheses in call to ‘print’. Did you mean print(int “not allow”)?
Mình bị lỗi như trên thì làm như nào vậy? Chỉ giúp mình với ad
thanks bài viết khá chi tiết
nhưng giờ dùng rclone tiện hơn nhiều
bookmark lại