python backup for mongo, mysql, FactorRH

app.py 4.2KB

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