Script de Backup (dump) Mysql – Múltiplos bancos em arquivos separados

Com certeza você já deve conhecer diversas maneiras de realizar backup de sua base Mysql. Mas o objetivo deste howto é apenas uma variação de um script clássico de backup.

Vamos ao problema:

A maioria das pessoas utilizam este comando para backup:

mysqldump -u root -pPASSWORD –all-databases | gzip > /mnt/database`data ‘ %m-%d-%Y’`.sql.gz

Isso vai gerar um backup de todos os bancos de dados de seu SGBD e compactar com o nome de data 03/22/2012.sql.gz. O problema esta ai, pois ele irá gerar todas as querys em um único arquivo, ou seja, se você quiser restaurar um único banco de dados, terá que procurar o trecho no dump que corresponde ao banco desejado.

A solução apresentada abaixo é uma alternativa, onde a partir de um laço, lê todos os elementos do SGBD, e gera um dump já compactado de cada banco, separadamente.

#!/bin/bash
# backup mysql com --all-databases, mas separados cada banco em um único arquivo


DIR="/var/arquivos_backup/mysql"
USER="root"
PASSWORD="senha"
OUTPUTDIR="/var/lib/databases"
MYSQLDUMP="/usr/bin/mysqldump"
MYSQL="/usr/bin/mysql"

# elimando arquivos de backup antigos
rm -rf $DIR/*

# lendo a lista de banco de dados
databases=`$MYSQL --user=$USER --password=$PASSWORD \
-e "SHOW DATABASES;" | tr -d "| " | grep -Ev '(Database|information_schema)'`

# realizando o dump e compactando cada arquivo gerado
for db in $databases; do
echo $db
$MYSQLDUMP --force --opt --user=$USER --password=$PASSWORD \
--databases $db | gzip > "$OUTPUTDIR/$db.gz"
done

Com essa idéia, pode-se editar um pouco mais este script, como por exemplo compactar a pasta com todos os arquivos gerados, e já transferir para seu storage com Active Directory, por exemplo.

Aqui disponibilizo para download um script exatamente com essa idéia em prática.

Script de Backup – Mysql – Com depósito no Storage – AD

Depois é só colocar no CronTab.

Referência: snowfrog.net

4 thoughts on “Script de Backup (dump) Mysql – Múltiplos bancos em arquivos separados

  1. Cuidado com a linha:

    # elimando arquivos de backup antigos
    11.rm -rf $DIR/*

    Detonou meu HD e ferrou todos os arquivos. Tem que declarar a variável antes. Por favor, corrigir o script.

    At.

  2. Corrigido. No arquivo txt onde tem o script completo esta variável esta declarada. Desculpe qualquer problema causado.

Leave a Reply

Your email address will not be published. Required fields are marked *