python backup for mongo, mysql, FactorRH

app.py 3.7KB

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