Backup automatizado de toda a base MySQL
Publicado por Mauricio Sousa (última atualização em 26/01/2015)
[ Hits: 9.526 ]
Funções do script:
- Busca em cada execução todos os bancos da base local, assegurando que nenhum banco novo fique esquecido de fazer backup.
- Comprime os arquivo no formato "bz2" e os salva no diretório "/var/backups/mysql", podendo ser alterado no script.
- Cria para cada banco um diretório com o nome do mesmo, facilitando a localização e identificação dos arquivos.
- Mantém os backups dos últimos 7 dias, removendo os mais antigos.
- A rotina de limpeza sempre checa se existe pelo menos um arquivo de backup, caso só exista um, mesmo que tenha mais de 7 dias é preservado, assegurando que se por algum motivo os backups não tenham sido feitos nos últimos dias, a rotina de limpeza não remova todos.
Para que o script seja executado diariamente de forma automática deve ser adicionada a linha de execução ao crontab do usuário root. Na máquina que roda o serviço MySQL execute os comandos abaixo:
$ sudo su
# chmod +x /root/mysql-backup.py
# crontab -e
Adicione as linhas abaixo, o script será executado diariamente às duas da manhã:
0 2 * * * /root/mysql-backup.py >> /tmp/mysql-backup.log
Espero ter ajudado.
Abraços...
#! /usr/bin/python
# -*- coding: utf-8 -*-
import os, time, subprocess
from ConfigParser import ConfigParser
#author="Maurício Sousa"
config = ConfigParser()
# em Debian, /etc/mysql/debian.cnf contem 'root' login and password.
config.read("/etc/mysql/debian.cnf")
username = config.get('client', 'user')
password = config.get('client', 'password')
hostname = config.get('client', 'host')
date = time.strftime('%Y-%m-%d-%H:%M')
# diretorio de armazenamento dos backups
dest = "/var/backups/mysql"
def clear(directory):
number_of_files = len([item for item in os.listdir(directory) if os.path.isfile(os.path.join(directory, item))])
if number_of_files > 1:
print "% s - Foram encontrados %s arquivos de backup no diretório %s" % (date, number_of_files, directory)
purge_dir(directory)
else:
print "%s - Foram encontrados %s arquivos de backup nenhum será removido %s" % (date, number_of_files, directory)
def checkfile(filename):
filestats = os.stat(filename) # pega informaçoes do arquivo
if time.time() - filestats.st_mtime > 86400*7: # checa se o arquivo tem mais de 7 dias e remove caso positivo
print "Removendo: %s" % (filename)
os.remove(filename)
def purge_dir(path):
dirList = os.listdir(path) # Lista o diretório
for filename in dirList:
checkfile(os.path.join(path, filename)) # executa funcao checkfile.
def backup():
database_list_command="mysql -u %s -p%s -h %s --silent -N -e 'show databases'" % (username, password, hostname) #lista databases
for database in os.popen(database_list_command).readlines():
database = database.strip()
if database == 'information_schema':
continue
if database == 'performance_schema':
continue
print "%s - Criando Backup database: %s" % (date, database)
target_dir = "%s/%s" % (dest, database)
if not os.path.exists(target_dir):
print "%s - Criando novo diretório: %s" % (date, target_dir)
os.makedirs(target_dir)
filename = "%s/%s-%s.sql" % (target_dir, database, date)
os.popen("mysqldump --max_allowed_packet=128M --single-transaction -u %s -p%s -h%s %s | bzip2 -c > %s.bz2" % (username, password, hostname, database, filename))
clear(target_dir)
backup()
Dígito verificador, módulo 11 simples, para uso interno no "postgresql" como
Gerar backups de banco de dados MySQL
Python com CouchDB usando couchdbkit
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
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo 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
É normal não gostar de KDE? (7)
O programa assinador digital (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)









