Dump MySQL com relatório de logs por e-mail
Publicado por evandro matos couto (última atualização em 09/05/2014)
[ Hits: 6.177 ]
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()
Dígito verificador, módulo 11 simples, para uso interno no "postgresql" como
Acompanhar status de uma replicação MySQL
Backup automatizado de toda a base MySQL
yFone - Yes, outra agenda telefonica escrita em python! ;- )
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Secure boot, artigo interessante, nada técnico. (1)
Preciso recuperar videos *.mp4 corrompidos (1)
\Boot sem espaço em disco (Fedora KDE Plasma 42) (6)









