Backup automatizado de toda a base MySQL
Publicado por Mauricio Sousa (última atualização em 26/01/2015)
[ Hits: 8.875 ]
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()
Python com CouchDB usando couchdbkit
Dump MySQL com relatório de logs por e-mail
Atenção a quem posta conteúdo de dicas, scripts e tal (1)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Desenvolvimento de um driver (8)
Não esta salvando as configurações de usuário. (3)
Quais Shell Scripts vocês usam? (5)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba