import os from datetime import datetime, timedelta import ftplib from subprocess import Popen, PIPE # DB_LIST = ['BDECR', 'BDEDO', 'BDEGT', 'BDEHN', 'BDENI', 'BDEPA', 'BDESV'] # DB_LIST = ['TestDB', 'backuptest'] DB_LIST = ['backuptest', 'factormysql'] DB_USER = 'haproxy' DB_PASS = str(os.getenv('QAPASS')) DB_HOST = '159.203.104.215' BACKUP_PATH = '/backup/' def RemoveFile(filename): try: os.remove(filename) return except BaseException as ex: print(f'FILE REMOVE ERROR {ex}') def OpenFTP(server='FACTOR'): try: if(server == 'FACTOR'): ftp = ftplib.FTP("165.227.114.190") ftp.login("factor", 'rh$2021') ftp.cwd('upload') return ftp else: ## port 2023 ftp = ftplib.FTP() ftp.connect("190.122.187.218", 2023) ftp.login("ming", 'dit2020 2020') except ftplib.Error as er: print(f'FTP open error { er }') return def DeleteFromSSHStorage(filename): try: ftp = OpenFTP() ftp.delete(filename) ftp.close() except BaseException as e: print(f'FTP DELETE ERROR {e}') return def lessDate(fecha,dias): return ( fecha - timedelta(days=dias)).strftime('%Y-%m-%d') def DeleteFactorRH(): try: ftp = OpenFTP() NOW = datetime.now() PREV = lessDate(NOW,3); to_delete_docs = 'factorh_grupodit-' + PREV # to_delete_docs = 'factormysql-' files = [doc for doc in ftp.nlst() if to_delete_docs in doc ] for doc in files: ftp.delete(doc) ftp.close() except Exception as error: print(f'FTP FACTOR DELETE ERROR {error}') def PutOverSSH(path='/home/ming/CODE/PyKup/backup/BDEDO-20082021-1145.sql',remote='mingmecca.sql'): try: ftp = OpenFTP() with open(path, "rb") as file: ftp.storbinary('STOR %s' % remote, file) ftp.close() RemoveFile(path) except BaseException as err: print(f"FTP CREATE ERROR {err}") return def MongoBK(): BACKUP_PATH = './backup/mongo/' try: os.stat(BACKUP_PATH) except: os.mkdir(BACKUP_PATH) mongo_url = 'mongodb://QAadmin:QA20172017@165.227.177.95:27017/test001?authSource=admin&readPreference=primary&appname=MongoDB%20Compass&ssl=false' # mongo_url = 'mongodb://QAadmin:QA20172017@165.227.177.95:27017/candidocu_js?authSource=admin&readPreference=primary&appname=MongoDB%20Compass&ssl=false' command = 'mongodump --uri ' + mongo_url + ' -o ' + BACKUP_PATH with Popen(command, stdout=PIPE, stderr=None, shell=True) as process: output = process.communicate()[0].decode("utf-8") print(output) def MysqlBK(): BACKUP_PATH = 'backup/mysql/' NOW = datetime.now() DATETIME = NOW.strftime('%d%m%Y') TO_DELETE = ( NOW - timedelta(days=3) ).strftime('%d%m%Y') for DB_NAME in DB_LIST: # FILE = f'{DB_NAME}-' + DATETIME + '.sql' FILE = f'{DB_NAME}-' + DATETIME + '.sql' FILE_NAME = BACKUP_PATH + FILE try: os.stat(BACKUP_PATH) except: os.mkdir(BACKUP_PATH) params = ' --routines=true --triggers=true --quick --compress --skip-lock-tables --verbose ' command = "mysqldump -h " + DB_HOST + " -u " + DB_USER + " -p" + DB_PASS + " " + DB_NAME + params + " > " + FILE_NAME with Popen(command, stdout=PIPE, stderr=None, shell=True) as process: output = process.communicate()[0].decode("utf-8") print(output) PutOverSSH(FILE_NAME, FILE) DeleteFromSSHStorage( f'{DB_NAME}-' + TO_DELETE + '.sql' ) return MysqlBK() DeleteFactorRH() # MongoBK() # Backup() # PutOverSSH()