New Features and Improvements
+ Specific backup folder + Specific export folder + Optional post-backup cleaningmaster
parent
bd4a2881ed
commit
e8142e082a
41
backupper.py
41
backupper.py
|
|
@ -5,17 +5,14 @@ import subprocess
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description='Backup manager for backing up Docker Containers to Google Drive.')
|
parser = argparse.ArgumentParser(description='Backup manager for backing up Docker Containers to Google Drive.')
|
||||||
#group = parser.add_mutually_exclusive_group(required=True)
|
|
||||||
|
|
||||||
# parser.add_argument('--export', action='store_true', help="Back up the Docker Container with the load method.")
|
|
||||||
# parser.add_argument('--containers', action='store_true', type=list, help="Back up the Docker Container with the
|
|
||||||
# load method.", required=True)
|
|
||||||
parser.add_argument('--containers', nargs='+', required=True)
|
parser.add_argument('--containers', nargs='+', required=True)
|
||||||
parser.add_argument('--data', required=False)
|
parser.add_argument('--data', required=False)
|
||||||
|
parser.add_argument('--backup', required=True, help='Backup target directory.')
|
||||||
|
parser.add_argument('--export', required=True, help='Compressed backup file target directory.')
|
||||||
parser.add_argument('--upload', action='store_true', required=False)
|
parser.add_argument('--upload', action='store_true', required=False)
|
||||||
|
parser.add_argument('--clean', action='store_true', required=False)
|
||||||
|
|
||||||
#sub = parser.add_subparsers(help='Backup mysql databases.')
|
|
||||||
#mysql_parser = sub.add_parser
|
|
||||||
mysql_parser = parser.add_argument_group('mysql')
|
mysql_parser = parser.add_argument_group('mysql')
|
||||||
mysql_parser.add_argument('--mysql', required=False, help='MySql container name or id')
|
mysql_parser.add_argument('--mysql', required=False, help='MySql container name or id')
|
||||||
mysql_parser.add_argument('--user', required=False, help='MySql username')
|
mysql_parser.add_argument('--user', required=False, help='MySql username')
|
||||||
|
|
@ -28,10 +25,12 @@ mysql = args.mysql
|
||||||
user = args.user
|
user = args.user
|
||||||
password = args.password
|
password = args.password
|
||||||
upload = args.upload
|
upload = args.upload
|
||||||
|
folder = args.backup
|
||||||
|
export = args.export
|
||||||
|
clean = args.clean
|
||||||
|
|
||||||
|
|
||||||
def clear_backup():
|
def clear_backup():
|
||||||
folder = 'backup'
|
|
||||||
for filename in os.listdir(folder):
|
for filename in os.listdir(folder):
|
||||||
file_path = os.path.join(folder, filename)
|
file_path = os.path.join(folder, filename)
|
||||||
try:
|
try:
|
||||||
|
|
@ -54,14 +53,14 @@ def runcommand(cmd):
|
||||||
|
|
||||||
|
|
||||||
if containers:
|
if containers:
|
||||||
if not os.path.exists('backup'):
|
if not os.path.exists(folder):
|
||||||
os.mkdir('backup')
|
os.mkdir(folder)
|
||||||
|
|
||||||
clear_backup()
|
clear_backup()
|
||||||
|
|
||||||
for container in containers:
|
for container in containers:
|
||||||
print 'Backing up ' + container + '...'
|
print 'Backing up ' + container + '...'
|
||||||
exitCode = runcommand("docker export " + container + " -o backup/" + container + ".tar.gz")
|
exitCode = runcommand("docker export " + container + " -o " + folder + "/" + container + ".tar.gz")
|
||||||
if exitCode[0] is 0:
|
if exitCode[0] is 0:
|
||||||
print container + ' successfully backed up.'
|
print container + ' successfully backed up.'
|
||||||
else:
|
else:
|
||||||
|
|
@ -73,7 +72,7 @@ if data:
|
||||||
print 'Data folder is not exist.'
|
print 'Data folder is not exist.'
|
||||||
|
|
||||||
print 'Backing up data folder...'
|
print 'Backing up data folder...'
|
||||||
exitCode = runcommand("tar -zcf backup/data.tar.gz " + data)
|
exitCode = runcommand("tar -zcf " + folder + "/data.tar.gz " + data)
|
||||||
if exitCode[0] is 0:
|
if exitCode[0] is 0:
|
||||||
print 'Data folder successfully backed up.'
|
print 'Data folder successfully backed up.'
|
||||||
else:
|
else:
|
||||||
|
|
@ -89,7 +88,7 @@ if mysql:
|
||||||
|
|
||||||
print 'Backing up MySql databases...'
|
print 'Backing up MySql databases...'
|
||||||
exitCode = runcommand("docker exec " + mysql + " /usr/bin/mysqldump -u " + user + " --password=" + password
|
exitCode = runcommand("docker exec " + mysql + " /usr/bin/mysqldump -u " + user + " --password=" + password
|
||||||
+ " --all-databases > backup/backup.sql")
|
+ " --all-databases > " + folder + "/backup.sql")
|
||||||
if exitCode[0] is 0:
|
if exitCode[0] is 0:
|
||||||
print 'MySql databases successfully backed up.'
|
print 'MySql databases successfully backed up.'
|
||||||
else:
|
else:
|
||||||
|
|
@ -98,19 +97,29 @@ if mysql:
|
||||||
|
|
||||||
if upload:
|
if upload:
|
||||||
backup_name = datetime.now().strftime("%d-%m-%Y_%H-%M-%S")
|
backup_name = datetime.now().strftime("%d-%m-%Y_%H-%M-%S")
|
||||||
|
backup_path = export + "/backup_" + backup_name + ".tar.gz"
|
||||||
print 'Preparing for backup...'
|
print 'Preparing for backup...'
|
||||||
exitCode = runcommand("tar -zcf backup_" + backup_name + ".tar.gz backup")
|
|
||||||
|
if not os.path.exists(export):
|
||||||
|
os.mkdir(export)
|
||||||
|
|
||||||
|
exitCode = runcommand("tar -zcf " + backup_path + " " + folder)
|
||||||
if exitCode[0] is 0:
|
if exitCode[0] is 0:
|
||||||
print 'Preparing successfully.'
|
print 'Preparing successfully.'
|
||||||
print 'Uploading...'
|
print 'Uploading...'
|
||||||
exitCode = runcommand("mega-put backup_" + backup_name + ".tar.gz /backup/backup_" + backup_name + ".tar.gz")
|
exitCode = runcommand("mega-put " + backup_path + " /backup/backup_" + backup_name + ".tar.gz")
|
||||||
if exitCode[0] is 0:
|
if exitCode[0] is 0:
|
||||||
print 'Upload successful.'
|
print 'Upload successful.'
|
||||||
else:
|
else:
|
||||||
print 'Upload failed.'
|
print 'Upload failed.'
|
||||||
print exitCode[2]
|
print exitCode[2]
|
||||||
if os.path.exists("backup_" + backup_name + ".tar.gz"):
|
|
||||||
os.remove("backup_" + backup_name + ".tar.gz")
|
|
||||||
else:
|
else:
|
||||||
print 'Preparing failed.'
|
print 'Preparing failed.'
|
||||||
print exitCode[2]
|
print exitCode[2]
|
||||||
|
|
||||||
|
if clean:
|
||||||
|
if os.path.exists(folder):
|
||||||
|
shutil.rmtree(folder)
|
||||||
|
|
||||||
|
if os.path.exists(export):
|
||||||
|
shutil.rmtree(export)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue