Dump MySQL com relatório de logs por e-mail
Publicado por evandro matos couto (última atualização em 09/05/2014)
[ Hits: 5.906 ]
Homepage: tutoriaisgnulinux.com
O script tem como função gerar o dump de cada database e em seguida confirmar se o dump foi realizado com sucesso. Após o término do dump ele chama uma função chamada envia_email e dispara o e-mail informando o status de cada dump realizado.
Link para download:
http://documentacoes.tutoriaisgnulinux.com/SCRIPTS-PYTHON/dump_mysql.py
http://documentacoes.tutoriaisgnulinux.com/SCRIPTS-PYTHON/envia_email.py
Script dump_mysql.py: #!/usr/bin/python import MySQLdb import os import shutil import commands import datetime import smtplib from email.MIMEText import MIMEText from envia_email import envia_email #INSIRA AQUI OS DADOS DO SERVIDOR MYSQL USER = 'root' PASS = 'senha-bd' HOST = 'localhost' PATH = 'MYSQL_DUMP' BARRA = '/' DOIS_PONTOS = ":" EMAIL= "email@dominio.com.br" #DIRETORIO ONDE DEVERA SALVAR OS ARQUIVOS DE DUMP PWD = os.getcwd() #VARIAVEL QUE DEFINE QUANTOS DIAS DEVE ARMAZENAR O DUMP DIAS_ATRAS = 3 #VERIFICANDO SE EXISTE O DIRETORIO PRINCIPAL if os.path.exists(PATH): log = 'Dir ja existe' else: os.mkdir(PATH) NOW = datetime.datetime.now() HOJE = NOW.strftime('%d-%m') HORARIO_ATUAL = str(NOW.hour) + DOIS_PONTOS + str(NOW.minute) #VERIFICANDO SE EXISTE O DIRETORIO DO DIA if os.path.exists(PWD + BARRA + PATH + BARRA + HOJE): log = 'Dir ja existe' else: os.mkdir(PWD + BARRA + PATH + BARRA + HOJE) #CRIANDO O DIRETORIO DA HORA DO DUMP DIR_HORAIO = (PWD + BARRA + PATH + BARRA + HOJE + BARRA + HORARIO_ATUAL) os.mkdir(DIR_HORAIO) #GERANDO O LOG PARA ENVIO DE EMAIL - RELATORIO DE BACKUP DATA = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') INICIO = DATA + ' Started dump backup' #INICIANDO O SCRIPT E GERANDO O LOG NO ARQUIVO /var/log/BackupPC/LOG DUMP = "_dump" var_file = open(DIR_HORAIO + BARRA + DUMP, "a") var_file.write(INICIO + "\n") #INTERAGINDO COM O MYSQL db = MySQLdb.connect(HOST, USER, PASS) cursor = db.cursor() cursor.execute("show databases") databases = cursor.fetchall() #DUMP TABELA = '<table class="border" align="center" valign="top" width="600">' messages = TABELA for base in databases: DESTINO = DIR_HORAIO + BARRA + base[0]+'.sql.gz' HORARIO = commands.getoutput("date +'%r'") if base[0] != 'information_schema': print base[0] if os.system('mysqldump -x -e -u %s -p%s -h %s --databases %s | gzip > %s' %(USER,PASS,HOST,base[0],DESTINO)) == 0: messages += "<tr><td>%s</td><td>%s</td><td><b style='color:green'>OK</b></td></tr>" \ %(HORARIO,base[0]) else: messages += "<tr><td>%s</td><td>%s</td><td><b style='color:red'>NOT</b></td></tr>" \ %(HORARIO,base[0]) messages += "</table>" print messages #REMOVENDO OS ARQUIVOS E DIRETORIO ANTERIORES AGORA = datetime.date.today() DATAANTIGA = (AGORA - datetime.timedelta(DIAS_ATRAS)).strftime('%d-%m') if os.path.exists(PATH + BARRA + DATAANTIGA): shutil.rmtree(PATH + BARRA + DATAANTIGA) #LOG DATA = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') FIM = DATA + ' Finish dump backup' DUMP = "_dump" var_file = open(DIR_HORAIO + BARRA + DUMP, "a") var_file.write(FIM + "\n") #DISPARANDO EMAIL envia_email(EMAIL,messages) Função envia_email.py: #!/usr/bin/python # LIBS import os import commands import time import smtplib from email.MIMEText import MIMEText # FUNCAO ENVIA EMAIL def envia_email(recebe1,recebe2): # DEFINA AS VARIAVEIS ABAIXO DE ACORDO COM O SEU AMBIENTE SMTP = "smtp.googlemail.com" PORTA = "587" LOGIN = "email@gmail.com" EMAIL = "email@gmail.com" PASS = "senha-aqui" if (PORTA == 465): SMTPSERVER = smtplib.SMTP_SSL PORTA = str(PORTA) ASSUNTO="Dump Mysql - Prod" HOSTNAME = commands.getoutput("hostname") MENSAGEM="Servidor: %s <br />Local do dump: %s<br /><br /><center>Databases%s</center>" %(HOSTNAME,os.getcwd(),recebe2) FROM=EMAIL TO=recebe1 serv=SMTPSERVER() serv.connect(SMTP,PORTA) serv.login(LOGIN,PASS) msg1 = MIMEText("%s"% MENSAGEM,"html") msg1['Subject']=(ASSUNTO) msg1['From']=FROM msg1['To']=TO msg1['Content-type']="text/html" serv.sendmail(FROM,TO, msg1.as_string()) serv.quit() else: SMTPSERVER = smtplib.SMTP PORTA = str(PORTA) ASSUNTO="Dump Mysql - Prod" HOSTNAME = commands.getoutput("hostname") MENSAGEM="Servidor: %s <br />Local do dump: %s<br /><br /><center>Databases%s</center>" %(HOSTNAME,os.getcwd(),recebe2) FROM=EMAIL TO=recebe1 serv=SMTPSERVER() serv.connect(SMTP,PORTA) serv.starttls() serv.login(LOGIN,PASS) msg1 = MIMEText("%s"% MENSAGEM,"html") msg1['Subject']=(ASSUNTO) msg1['From']=FROM msg1['To']=TO msg1['Content-type']="text/html" serv.sendmail(FROM,TO, msg1.as_string()) serv.quit()
Python com CouchDB usando couchdbkit
yFone - Yes, outra agenda telefonica escrita em python! ;- )
Backup automatizado de toda a base MySQL
Gerar backups de banco de dados MySQL
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Wifi não funciona no Aspire ES 15 com o Debian (8)
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta