Rclone is a command line program to sync files and directories to and from:
- Amazon Drive
- Amazon S3
- DigitalOcean Spaces
- Dropbox
- Google Cloud Storage
- Google Drive
- Mega
- Microsoft Azure Blob Storage
- Microsoft OneDrive
- And more here
Install Rclone
mkdir -p /home/backup #Linux 64 bit: 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-* #Linux 32bit 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-*
Check rclone:
[root@itfromzero backup]# rclone version rclone v1.41 - os/arch: linux/amd64 - go version: go1.10
Create connection from server to Google Cloud
rclone config
At the command line still, type:
No remotes found – make a new one type n -> Enter
name> connection name: upload_google_drive -> Enter
Choose a number from below, or type in your own value
<Danh sách Cloud Server>
Storage> type 11 -> Enter
client_id = -> Enter
client_secret = -> Enter
Scope that rclone should use when requesting access from drive. type 1 – Full access all files… -> Enter
root_folder_id = -> Enter
service_account_file = -> Enter
Use auto config? type 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
Open above link by browser, then login to google drive -> Choose Allow. Copy Code.
Enter verification code> Paste Code -> Enter
Configure this as a team drive? type n -> Enter
type y to accept and q to exit.
Check connection:
rclone lsd upload_google_drive:
Script auto backup and upload to google drive
Create backup.py
nano /home/backup/backup.py
Script Contents:
#!/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")
Make backup crond
crontab -e
Add:
# # Crontab - Auto backup # 0 3 * * * python /home/backup/backup.py > /dev/null 2>&1
Let’s enjoy!

