Tự động sao lưu và upload Web server lên Google Drive
trunghieu_qbvn
2 nămBình luận: 1
Sao lưu dữ liệu trên máy chủ là công việc rất quan trọng để đảm bảo an toàn dữ liệu. Ví dụ việc sao lưu dữ liệu Website sẽ giúp các bạn phục hồi website nhanh chóng khi có sự cố xảy ra.
Bài viết này sẽ hướng dẫn các bạn tạo script tự động sao lưu dữ liệu Website (source, database, web server config file) lên Google Drive.

Cài đặt Rclone
Rclone là công cụ giúp đồng bộ hóa dữ liệu có khả năng kết nối với các dịch vụ lưu trữ đám mây. Điều này đảm bảo cho dữ liệu được an toàn và tốc độ sao lưu cực nhanh.

Rclone hiện tại hỗ trợ kết nối tới rất nhiều dịch vụ lưu trữ như:

  • Amazon Drive
  • Amazon S3
  • DigitalOcean Spaces
  • Dropbox
  • Google Cloud Storage
  • Google Drive
  • Mega
  • Microsoft Azure Blob Storage
  • Microsoft OneDrive
  • Và các dịch vụ khác được liệt kê ở đây
Bài viết này sẽ hướng dẫn kết nối Rclone với Google Drive, các dịch vụ khác hẹn các bạn ở những bài viết tiếp theo nhé.


Các bạn cài đặt Rclone theo các bước sau:

Code:
mkdir -p /home/backup
#Đối với Linux 64 bit:
Code:
cd /home/backup
wget https://downloads.rclone.org/v1.41/rclone-v1.41-linux-amd64.zip
unzip rclone-v*.zip
\cp rclone-v*-linux-amd64/rclone /usr/sbin/
rm -rf rclone-*
#Đối với Linux 32bit
Code:
cd /home/backup
wget https://downloads.rclone.org/v1.41/rclone-v1.41-linux-386.zip
unzip rclone-v*.zip
\cp rclone-v*-linux-386/rclone /usr/sbin/
rm -rf rclone-*
Dùng lệnh rclone để kiểm tra, ví dụ:
Code:
[root@itfromzero backup]# rclone version
rclone v1.41
- os/arch: linux/amd64
- go version: go1.10
Tạo kết nối từ server đến Google Cloud
Kết nối đến server qua SSH và sử dụng lệnh:
Code:
rclone config
Sau đó tương ứng với mỗi thông báo thì bạn cấu hình như sau:

No remotes found - make a new one Nhập n -> Enter

name> Bạn nhập tên kết nối. vd: upload_google_drive -> Enter

Choose a number from below, or type in your own value
<Danh sách Cloud Server>
Storage> Chọn 11 để kết nối đến Google Drive -> Enter

client_id = Để trống -> Enter
client_secret = Để trống -> Enter

Scope that rclone should use when requesting access from drive. Chọn 1 – Full access all files… -> Enter

root_folder_id = Để trống -> Enter
service_account_file = Để trống -> Enter

Use auto config? Chọn n -> Enter

If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=xxxxxxx
Đăng nhập - Tài khoản Google
accounts.google.com


Bạn copy link trên, mở bằng trình duyệt, sau đó đăng nhập bằng user google drive -> Chọn Allow/Đồng Ý để cấp quyền truy cập. Sau đó copy dòng Code hiện ra.

Enter verification code> Dán dòng code đã copy ở trình duyệt vào đây -> Enter

Configure this as a team drive? Chọn n -> Enter

Sau đó Chọn y để đồng ý và q để thoát.

Sau khi cấu hình xong sử dụng lệnh sau để kiểm tra:
Code:
rclone lsd upload_google_drive:



Script tự động backup và upload lên google drive
Tạo file backup.py bằng lệnh:
Code:
nano /home/backup/backup.py
Script dưới đây mình viết bằng python nên vps phải đc cài python mới chạy nhé, mặc định thì python cũng được cài sẵn rồi nên các bạn yên tâm.

Nếu thiếu zip thì cài thêm bằng câu lệnh sau:

Code:
yum -y install zip
Nội dụng script:

Code:
#!/usr/bin/python
# -*- coding: utf-8 -*-

#################################################################
#
# Web Server Backup and Upload to Google Drive
#
# Author: itfromzero.com
#
#################################################################
import os
from datetime import datetime
import logging, logging.handlers
import time

#Logging
def setup_custom_logger(name):
    formatter = logging.Formatter(fmt='%(asctime)s %(levelname)-2s %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
    handler = logging.handlers.RotatingFileHandler("/home/backup/backup.log", maxBytes=900000, backupCount=15)
    handler.setFormatter(formatter)
    screen_handler = logging.StreamHandler()
    screen_handler.setFormatter(formatter)
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    logger.addHandler(handler)
    logger.addHandler(screen_handler)
    return logger


logger = setup_custom_logger('myapp')
MYSQL_LIST=['db1','db2'] #MYSQL Database
DB_NUM = len(MYSQL_LIST)
WEB_LIST=['a','b','c'] #WEB Folder name
WEB_NUM= len(WEB_LIST)
MYSQL_USER='' #MYSQL user
MYSQL_PW='' #MYSQL Password
GDRIVE_FOLDER='BACKUP_WEB'

logger.info('Web Server Backup Script')

#Create Backup Folder
logger.info('Create Backup Folder')
cmd = "mkdir -p /home/backup/`date +%Y%m%d`"
os.system(cmd)

logger.info('Database Backup')
for i in range(0,DB_NUM):
    cmd = "mysqldump -u "+MYSQL_USER+" -p"+MYSQL_PW+" "+MYSQL_LIST[i]+"  | gzip > /home/backup/`date +%Y%m%d`/"+MYSQL_LIST[i]+"-`date +%Y%m%d-%H-%M-%S`.sql.gz"
    os.system(cmd)
    logger.info('Backup database: %s Complete',MYSQL_LIST[i])

logger.info('Web Source Backup')
for j in range(0,WEB_NUM):
    cmd = "zip -r /home/backup/`date +%Y%m%d`/"+WEB_LIST[j]+".zip /home/www/"+WEB_LIST[j]+" -q -x /home/www/"+WEB_LIST[j]+"/wp-content/cache/**\*"
    os.system(cmd)
    logger.info('Backup Web Source: %s Complete',WEB_LIST[j])

logger.info('Web Server Config Backup')
cmd = "cp -r /etc/nginx/conf.d/ /home/backup/`date +%Y%m%d`/nginx/"
os.system(cmd)
logger.info('Backup Web Server Config Complete')

logger.info('Start Upload To Google Drive')
cmd = 'rclone move /home/backup/`date +%Y%m%d` "upload_google_drive:'+GDRIVE_FOLDER+'/`date +%Y%m%d`" >> /var/log/rclone.log 2>&1'
os.system(cmd)
logger.info('Upload Complete')

logger.info('Delete Backup File')

cmd = "rm -rf /home/backup/`date +%Y%m%d`"
os.system(cmd)
logger.info('Delete Complete')

logger.info("Remove all backups older than 3 days")
cmd = 'rclone -q --min-age 3d delete "upload_google_drive:'+GDRIVE_FOLDER+'"'
os.system(cmd)
logger.info("Remove all empty folders older than 3 days")
cmd = 'rclone -q --min-age 3d rmdirs "upload_google_drive:'+GDRIVE_FOLDER+'"'
os.system(cmd)
logger.info("Cleanup Trash")
cmd = 'rclone cleanup "upload_google_drive:"'
os.system(cmd)
logger.info("Finish Backup and Upload to Google Drive")

Lưu ý: Script trên mình để web source ở /home/www , thư mục backup ở /home/backup. Các bạn nhớ sửa lại phù hợp với server của mình nhé.

Script trên có kịch bản như sau:

    • Backup toàn bộ database MySQL trên server, mỗi database được tạo thành 1 file .gz và lưu trong thư mục mysql
    • Backup toàn bộ code trong thư mục /home/www/domain, mỗi code web tạo thành 1 file .zip
    • Backup toàn bộ file cấu hình Nginx trong thư mục /etc/nginx/conf.d/ và lưu trong thư mục nginx
    • Tổng hợp tất cả các file backup vào 1 folder
    • Tự động upload lên Google Drive vào khoảng thời gian bạn đặt.
    • Tự động xóa file backup trên server sau khi upload xong.
    • Thiết lập thời gian tự động xóa file backup cũ trên Google Drive.
Lập lịch backup
Sử dụng Crontab để lập lịch chạy script

Dùng lệnh sau để chỉnh sửa crontab:

Code:
crontab -e
Nội dụng tương tự như sau:
Code:
#

# Crontab - Auto backup
#
0 3 * * * python /home/backup/backup.py > /dev/null 2>&1

Nhấp ESC :wq để thoát.

0 3 * * * có nghĩa là chạy script hàng ngày vào lúc 3:00

Hi vọng bài viết trên sẽ giúp cho công việc backup dữ liệu của các bạn trở nên nhẹ nhàng hơn. Chúc các bạn thành công.

Bài viết gốc:

Tự động backup và upload lên google drive
Blog chia sẻ kiến thức công nghệ thông tin ITFROMZERO
cocconden
TÍCH CỰC
2 năm
Lâu lâu có những bài viết hữu ích như vậy mà lại không được lên trang chủ.. có lẽ mấy mod k mặn mà với linux cho lắm
Cá nhân
Bạn
Hi bạn!
Điểm Reward Store: 
Tuổi Tinh tế: 
Cấp độ thành viên Tinh Tế


Tải app Tinh tế

Tải app Tinhte - Theo dõi thông tin mà bạn yêu thích

Tải app TinhteTải app Tinhte
Tải app Tinh tế cho Android trên Google PlayTải app Tinh tế cho iPhone, iPad trên App Store



Cộng đồng nổi bật




  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2020 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: 209 Đường Nam Kỳ Khởi Nghĩa, Phường 7, Quận 3, TP.HCM
  • Số điện thoại: 02862713156
  • MST: 0313255119
  • Giấy phép thiết lập MXH số 11/GP-BTTTT, Ký ngày: 08/01/2019