Guest User

Untitled

a guest
Feb 20th, 2018
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.24 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. import pymysql
  10.  
  11.  
  12. def mysql_schemas(Servidor, Sqluser, Sqlpass):
  13.  
  14. db = pymysql.connect(Servidor, Sqluser, Sqlpass)
  15.  
  16. cursor = db.cursor()
  17.  
  18. cursor.execute('show databases')
  19.  
  20. schemas = cursor.fetchall()
  21.  
  22. schemas = [s[0] for s in schemas]
  23.  
  24. schemas.remove('information_schema')
  25.  
  26. return schemas
  27.  
  28.  
  29. def mysql_dump(Pastabkp, Pastatmp, Schemas, Sqldump, Servidor, Sqluser, Sqlpass):
  30.  
  31. mkdir(Pastabkp + Pastatmp)
  32.  
  33. log = []
  34.  
  35. for schema in Schemas:
  36.  
  37. hr = (datetime.now().strftime('%d%m%Y-%H%M%S'))
  38.  
  39. arg = (Sqldump + ' -h ' + Servidor + ' -u ' + Sqluser + ' -p' + Sqlpass + ' --single-transaction=true ' +
  40. schema + ' > ' + Pastabkp + Pastatmp + '/' + schema + '-' + hr + '.sql')
  41.  
  42. stat = str(system(arg))
  43.  
  44. if stat == '0':
  45. stat = ('OK')
  46. else: stat = ('ERRO')
  47.  
  48. status = (schema, stat)
  49.  
  50. log.append(status)
  51.  
  52. return log
  53.  
  54.  
  55. def zipar(Pastazip, Pastatmp, Pastabkp):
  56.  
  57. arquivo_zip = (Pastazip + Pastatmp)
  58.  
  59. zips = ZipFile(arquivo_zip + '.zip', 'w', allowZip64=True, compression=ZIP_DEFLATED)
  60.  
  61. for folder, subfolders, files in walk(Pastabkp + Pastatmp):
  62. for file in files:
  63. zips.write(path.join(folder, file), path.relpath(path.join(folder, file), Pastabkp + Pastatmp))
  64.  
  65.  
  66. def email(Usuario, Senha, Smtp, Porta, Para, Servidor, log, Inicio_bkp, Final_bkp, Pastazip, Pastatmp):
  67.  
  68. caminho = Pastazip+Pastatmp+'.zip'
  69.  
  70. Schemas = str(log)
  71.  
  72. Assunto = str('['+Servidor+'] '+'Backup do banco de dados')
  73.  
  74. if Usuario == '' or Senha == '' or Smtp == '' or Porta == '' or Para == '':
  75. quit()
  76. else:
  77. msg = MIMEMultipart('alternative')
  78. msg['Subject'] = Assunto
  79. msg['From'] = Usuario
  80. msg['To'] = Para
  81. corpo = str('\nServidor: ' + Servidor + '\n''\nSchemas: ' + Schemas + '\n''\nInicio: ' +
  82. Inicio_bkp + '\nTermino: ' + Final_bkp + '\n''\nPath: '+caminho)
  83.  
  84. msg.attach(MIMEText(corpo, 'plain'))
  85. mail = SMTP(Smtp, Porta)
  86. mail.login(Usuario, Senha)
  87. mail.sendmail(Usuario, Para, msg.as_string())
  88. mail.quit()
  89.  
  90.  
  91. def retencao(Caminho_pasta, Dias):
  92. if Dias > 0:
  93.  
  94. data_agora_form = datetime.now().strftime('%d%m%Y')
  95. data_agora_form_int = datetime.now().strptime(data_agora_form, '%d%m%Y')
  96.  
  97. lista = listdir(Caminho_pasta)
  98. for l in lista:
  99. if l.endswith('.zip'):
  100. info = stat(Caminho_pasta + l)
  101. tstamp_mod = info.st_mtime
  102. data_mod = datetime.fromtimestamp(tstamp_mod)
  103. data_mod_form = data_mod.strftime('%d%m%Y')
  104. data_mod_form_int = data_mod.strptime(data_mod_form, '%d%m%Y')
  105. res = abs((data_agora_form_int - data_mod_form_int).days)
  106. if res > Dias:
  107. remove(Caminho_pasta + l)
  108.  
  109.  
  110. servidor = 'servidor'
  111. sql_user = 'usuario'
  112. sql_pass = 'senha'
  113.  
  114. pastabkp = 'C:/BACKUP/'
  115. pastazip = 'C:/BACKUP/BD/'
  116. sqldump = 'C:/BACKUP/BD/mysqldump.exe'
  117. nomearq = 'SQL-BKP'
  118. reter = 7
  119.  
  120. email_usuario = 'backup@teste.com.br'
  121. email_senha = 'teste'
  122. email_smtp = 'smtp.teste.com.br'
  123. email_porta = 587
  124. email_para = 'backup@teste.com.br'
  125.  
  126. hora = (datetime.now().strftime('%H:%M'))
  127. pastatmp = (datetime.now().strftime(nomearq + '-%d%m%Y-%H%M%S'))
  128.  
  129.  
  130. # Registra horario de inicio do backup.
  131. inicio_bkp = (datetime.now().strftime('%d/%m/%Y %H:%M:%S'))
  132.  
  133. # Apaga backups antigos.
  134. retencao(pastazip, reter)
  135.  
  136. # Lista schemas do banco de dados
  137. schemas = mysql_schemas(servidor, sql_user, sql_pass)
  138.  
  139. # Gera os dumps dos schemas informados.
  140. log = mysql_dump(pastabkp, pastatmp, schemas, sqldump, servidor, sql_user, sql_pass)
  141.  
  142. # Gera arquivo zip com os dumps.
  143. zipar(pastazip, pastatmp, pastabkp)
  144.  
  145. # Remove a pasta.
  146. rmtree(pastabkp + pastatmp)
  147.  
  148. # Registra hora final do backup.
  149. final_bkp = (datetime.now().strftime('%d/%m/%Y %H:%M:%S'))
  150.  
  151. # Envia o email.
  152. email(email_usuario, email_senha, email_smtp, email_porta,email_para,
  153. servidor, log, inicio_bkp, final_bkp, pastazip, pastatmp)
Add Comment
Please, Sign In to add comment