Dump MySQL com relatório de logs por e-mail

Publicado por evandro matos couto (última atualização em 09/05/2014)

[ Hits: 5.774 ]

Homepage: tutoriaisgnulinux.com

Download mysql_dump.tar




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

  



Esconder código-fonte

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()

Scripts recomendados

Gerar backups de banco de dados MySQL

Dígito verificador, módulo 11 simples, para uso interno no "postgresql" como

yFone - Yes, outra agenda telefonica escrita em python! ;- )

inserção

Acompanhar status de uma replicação MySQL


  

Comentários
[1] Comentário enviado por vandocouto em 25/05/2014 - 01:03h

Alguém utilizou o script?
Abs,
Evandro Couto.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts