Guest User

Untitled

a guest
Jan 22nd, 2018
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.72 KB | None | 0 0
  1. # -*- coding: ascii -*-
  2. from os import system, mkdir, listdir, walk, stat, remove, path
  3. from shutil import rmtree
  4. from zipfile import ZipFile, ZIP_DEFLATED
  5. from datetime import datetime
  6. from smtplib import SMTP
  7. from email.mime.multipart import MIMEMultipart
  8. from email.mime.text import MIMEText
  9.  
  10.  
  11. def mysql_dump(Pastabkp, Pastatmp, Schemas, Sqldump, Servidor, Sqluser, Sqlpass):
  12.  
  13. mkdir(Pastabkp + Pastatmp)
  14.  
  15. for schema in Schemas:
  16. hr = (datetime.now().strftime('%d%m%Y-%H%M%S'))
  17. arg = (Sqldump + ' -h ' + Servidor + ' -u ' + Sqluser + ' -p' + Sqlpass + ' --single-transaction=true ' +
  18. schema + ' > ' + Pastabkp + Pastatmp + '/' + schema + '-' + hr + '.sql')
  19. system(arg)
  20.  
  21.  
  22. def zipar(Pastazip, Pastatmp, Pastabkp):
  23.  
  24. arquivo_zip = (Pastazip + Pastatmp)
  25.  
  26. zips = ZipFile(arquivo_zip + '.zip', 'w', allowZip64=True, compression=ZIP_DEFLATED)
  27.  
  28. for folder, subfolders, files in walk(Pastabkp + Pastatmp):
  29. for file in files:
  30. zips.write(path.join(folder, file), path.relpath(path.join(folder, file), Pastabkp + Pastatmp))
  31.  
  32.  
  33. def email(Usuario, Senha, Smtp, Porta, Para, Servidor, Schemas, Inicio_bkp, Final_bkp, Pastazip, Pastatmp):
  34.  
  35. caminho = Pastazip+Pastatmp+'.zip'
  36.  
  37. Schemas = str(Schemas)
  38.  
  39. Assunto = str('['+Servidor+'] '+'Backup do banco de dados')
  40.  
  41. if Usuario == '' or Senha == '' or Smtp == '' or Porta == '' or Para == '':
  42. quit()
  43. else:
  44. msg = MIMEMultipart('alternative')
  45. msg['Subject'] = Assunto
  46. msg['From'] = Usuario
  47. msg['To'] = Para
  48. corpo = str('\nServidor: ' + Servidor + '\n''\nSchemas: ' + Schemas + '\n''\nInicio: ' +
  49. Inicio_bkp + '\nTermino: ' + Final_bkp + '\n''\nPath: '+caminho)
  50.  
  51. msg.attach(MIMEText(corpo, 'plain'))
  52. mail = SMTP(Smtp, Porta)
  53. mail.login(Usuario, Senha)
  54. mail.sendmail(Usuario, Para, msg.as_string())
  55. mail.quit()
  56.  
  57.  
  58. def retencao(Caminho_pasta, Dias):
  59. if Dias > 0:
  60.  
  61. data_agora_form = datetime.now().strftime('%d%m%Y')
  62. data_agora_form_int = datetime.now().strptime(data_agora_form, '%d%m%Y')
  63.  
  64. lista = listdir(Caminho_pasta)
  65. for l in lista:
  66. if l.endswith('.zip'):
  67. info = stat(Caminho_pasta + l)
  68. tstamp_mod = info.st_mtime
  69. data_mod = datetime.fromtimestamp(tstamp_mod)
  70. data_mod_form = data_mod.strftime('%d%m%Y')
  71. data_mod_form_int = data_mod.strptime(data_mod_form, '%d%m%Y')
  72. res = abs((data_agora_form_int - data_mod_form_int).days)
  73. if res > Dias:
  74. remove(Caminho_pasta + l)
  75.  
  76.  
  77. servidor = 'SERVIDOR'
  78. sql_user = 'USUARIO'
  79. sql_pass = 'SENHA'
  80. schemas = 'SCHEMA1,SCHEMA2.SCHEMA3'.split(',')
  81.  
  82. pastabkp = 'C:/TESTE/'
  83. pastazip = 'C:/TESTE/ZIP/'
  84. sqldump = 'C:/TESTE/mysqldump.exe'
  85. nomearq = 'BACKUP'
  86. reter = 7
  87.  
  88. email_usuario = 'backup@teste.com.br'
  89. email_senha = 'teste123'
  90. email_smtp = 'smtp.teste.com.br'
  91. email_porta = 587
  92. email_para = 'backup@teste.com.br'
  93.  
  94. hora = (datetime.now().strftime('%H:%M'))
  95. pastatmp = (datetime.now().strftime(nomearq + '-BKP-%d%m%Y-%H%M%S'))
  96.  
  97.  
  98. # Registra horario de inicio do backup.
  99. inicio_bkp = (datetime.now().strftime('%d/%m/%Y %H:%M:%S'))
  100.  
  101. # Apaga backups antigos.
  102. retencao(pastazip, reter)
  103.  
  104. # Gera os dumps dos schemas informados.
  105. mysql_dump(pastabkp, pastatmp, schemas, sqldump, servidor, sql_user, sql_pass)
  106.  
  107. # Gera arquivo zip com os dumps.
  108. zipar(pastazip, pastatmp, pastabkp)
  109.  
  110. # Remove a pasta.
  111. rmtree(pastabkp + pastatmp)
  112.  
  113. # Registra hora final do backup.
  114. final_bkp = (datetime.now().strftime('%d/%m/%Y %H:%M:%S'))
  115.  
  116. # Envia o email.
  117. email(email_usuario, email_senha, email_smtp, email_porta,
  118. email_para, servidor, schemas, inicio_bkp, final_bkp, pastazip, pastatmp)
Add Comment
Please, Sign In to add comment