Dump MySQL com relatório de logs por e-mail
Publicado por evandro matos couto (última atualização em 09/05/2014)
[ Hits: 6.175 ]
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()
Backup automatizado de toda a base MySQL
Dígito verificador, módulo 11 simples, para uso interno no "postgresql" como
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
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Como posso remover arquivos MSG duplicados das minhas pastas de forma ... (0)
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (4)









