Contents:
Rclone is a command line program to sync files and directories to and from:
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
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:
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")
crontab -e
Add:
# # Crontab - Auto backup # 0 3 * * * python /home/backup/backup.py > /dev/null 2>&1
Let’s enjoy!
An alternative for the nmcli is the nmtui, short for Network Manager Text User Interface,…
MariaDB is an enhanced, drop-in replacement for MySQL. MariaDB can be a better choice for…
MariaDB is an enhanced, drop-in replacement for MySQL. MariaDB can be a better choice for…
Rclone is a command line program written in Go language, used to sync files and…
By default, authentication is disabled in MongoDB, but this is not so critical as, out…
What is Pip? pip is a tool for installing and managing Python packages. With pip…
Leave a Comment