python backup for mongo, mysql, FactorRH

app.py 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import os
  2. from datetime import datetime, timedelta
  3. import ftplib
  4. from subprocess import Popen, PIPE
  5. import shutil
  6. '''
  7. TODO
  8. mysql bulk BDEGT database backup to dev testing db
  9. zip mongodb backup and put on over FTP
  10. '''
  11. # DB_LIST = ['BDECR', 'BDEDO', 'BDEGT', 'BDEHN', 'BDENI', 'BDEPA', 'BDESV']
  12. # DB_LIST = ['TestDB', 'backuptest']
  13. DB_LIST = ['backuptest', 'factormysql']
  14. DB_USER = 'haproxy'
  15. DB_PASS = str(os.getenv('QAPASS'))
  16. DB_HOST = '159.203.104.215'
  17. BACKUP_PATH = '/backup/'
  18. def RemoveFile(filename):
  19. try:
  20. os.remove(filename)
  21. return
  22. except BaseException as ex:
  23. print(f'FILE REMOVE ERROR {ex}')
  24. def OpenFTP(server='FACTOR'):
  25. try:
  26. if(server == 'FACTOR'):
  27. ftp = ftplib.FTP("165.227.114.190")
  28. ftp.login("factor", 'rh$2021')
  29. ftp.cwd('upload')
  30. return ftp
  31. else:
  32. ## ---- firewall ftp port -> 2023
  33. ftp = ftplib.FTP()
  34. ftp.connect("190.122.187.218", 2023)
  35. ftp.login("ming", 'dit2020 2020')
  36. return ftp
  37. except ftplib.Error as er:
  38. print(f'FTP open error { er }')
  39. return
  40. def DeleteFromSSHStorage(filename):
  41. try:
  42. ftp = OpenFTP('FIREWALL')
  43. ftp.delete(filename)
  44. ftp.close()
  45. except BaseException as e:
  46. print(f'FTP DELETE ERROR {e}')
  47. return
  48. def lessDate(fecha,dias):
  49. return ( fecha - timedelta(days=dias)).strftime('%Y-%m-%d')
  50. def DeleteFactorRH():
  51. try:
  52. ftp = OpenFTP()
  53. NOW = datetime.now()
  54. PREV = lessDate(NOW,3);
  55. to_delete_docs = 'factorh_grupodit-' + PREV
  56. # to_delete_docs = 'factormysql-'
  57. files = [doc for doc in ftp.nlst() if to_delete_docs in doc ]
  58. for doc in files:
  59. ftp.delete(doc)
  60. ftp.close()
  61. except Exception as error:
  62. print(f'FTP FACTOR DELETE ERROR {error}')
  63. def PutOverSSH(path='/home/ming/CODE/PyKup/backup/BDEDO-20082021-1145.sql',remote='mingmecca.sql'):
  64. try:
  65. ftp = OpenFTP('FIREWALL')
  66. with open(path, "rb") as file:
  67. ftp.storbinary('STOR %s' % remote, file)
  68. ftp.close()
  69. RemoveFile(path)
  70. except BaseException as err:
  71. print(f"FTP CREATE ERROR {err}")
  72. return
  73. def MongoBK():
  74. BACKUP_PATH = os.getcwd() + '/backup/mongo/'
  75. try:
  76. os.stat(BACKUP_PATH)
  77. except:
  78. os.mkdir(BACKUP_PATH)
  79. mongo_url = 'mongodb://QAadmin:QA20172017@165.227.177.95:27017/test001?authSource=admin&readPreference=primary&appname=MongoDB%20Compass&ssl=false'
  80. command = 'mongodump'+ ' -o ' + BACKUP_PATH + ' --uri ' + mongo_url
  81. with Popen(command, stdout=PIPE, stderr=None, shell=True) as process:
  82. output = process.communicate()[0].decode("utf-8")
  83. print(output)
  84. FILE_NAME = 'MONGO-' + datetime.now().strftime('%Y-%m-%d')
  85. FILE_DELETE_NAME = 'MONGO-' + lessDate(datetime.now(), 3) + ".zip"
  86. shutil.make_archive(FILE_NAME, 'zip', BACKUP_PATH )
  87. if( os.path.isdir( BACKUP_PATH )):
  88. shutil.rmtree(BACKUP_PATH)
  89. FILE_NAME = FILE_NAME + ".zip"
  90. PutOverSSH(FILE_NAME, FILE_NAME)
  91. DeleteFromSSHStorage(FILE_DELETE_NAME)
  92. def MysqlBK():
  93. BACKUP_PATH = 'backup/mysql/'
  94. NOW = datetime.now()
  95. DATETIME = NOW.strftime('%d%m%Y')
  96. TO_DELETE = ( NOW - timedelta(days=3) ).strftime('%d%m%Y')
  97. for DB_NAME in DB_LIST:
  98. # FILE = f'{DB_NAME}-' + DATETIME + '.sql'
  99. FILE = f'{DB_NAME}-' + DATETIME + '.sql'
  100. FILE_NAME = BACKUP_PATH + FILE
  101. try:
  102. os.stat(BACKUP_PATH)
  103. except:
  104. os.mkdir(BACKUP_PATH)
  105. params = ' --routines=true --triggers=true --quick --compress --skip-lock-tables --verbose '
  106. command = "mysqldump -h " + DB_HOST + " -u " + DB_USER + " -p" + DB_PASS + " " + DB_NAME + params + " > " + FILE_NAME
  107. with Popen(command, stdout=PIPE, stderr=None, shell=True) as process:
  108. output = process.communicate()[0].decode("utf-8")
  109. print(output)
  110. PutOverSSH(FILE_NAME, FILE)
  111. DeleteFromSSHStorage( f'{DB_NAME}-' + TO_DELETE + '.sql' )
  112. return
  113. # MysqlBK()
  114. # DeleteFactorRH()
  115. MongoBK()