Backup do MYSQL
De gutocarvalho.net
(Redirecionado de Script de Backup de banco MYSQL, dump por banco e dump all)
Crie o arquivo abaixo
#!/bin/bash
#
# SCRIPT para fazer dump dos bancos de dados do MYSQL
# Ele faz dump banco a banco e dump all e envia relatorio por e-mail
#
#
# autor: guto@gutocarvalho.net
# data da criacao: 2008-07-03
#
#
# pre-requesitos de pacotes:
#
# mysqldump
# bzip2
# mailx
#
#
# como usar?
# configure as variaveis/constantes internas e execute-o
# ./mysqlbkp
#
#### variaveis/constantes ###########################################################
host="localhost" # nome do host
user="root" # nome de login
pass="senha" # senha
server=$(uname -a|awk '{ print $2 }') # nome do servidor
email="monitoramento@dominio.gov.br" # email de destino do relatorio
bk="/backup/cpd/mysql/dumps" # diretorio de destino dos dumps
bl="/backup/cpd/mysql/logs" # diretorio de destino dos logs
nb="7" # numero maximo de arquivos de backup a serem mantidos
be="mysql|information_schema|test" # bancos que nao vao entrar no backup
nw=$(date +%Y%m%d.%H%M%S) # variavel de hora
ln="$bl/mysql.dumps.$nw.log" # formato do arquivo de log
_mysqldump=$(which mysqldump) # caminho para comando mysqldump
_mail=$(which mail) # caminho para comando mail
### verificando se voce é o usuario root ###################################
if [ $(id -u) != "0" ];then
echo -e "\nErro: este script precisa ser executado com usuario root..."
echo -e "Ajuda: torne-se root, use o comando (su -) ou (sudo -s -H).\n"
exit 1
fi
### verifica se o mysqldump esta instalado ####################################
if [ ! -x $_mysqldump ];then
echo -e "\nErro: Este script não conseguiu encontrar o comando mysqldump"
echo -e "Ajuda: Corrija o caminho na variavel _mysqldump\n"
exit 1
fi
### verifica se o mailx esta instalado ####################################
if [ ! -x $_mail ];then
echo "Erro: Este script não conseguiu encontrar o comando mail"
echo "Ajuda: Corrija o caminho na variavel _mail"
exit 1
fi
### verificando se existe o diretorio para armazenar os logs #############################
if [ ! -d $bl ]; then
echo -e "\nErro: o diretorio de logs nao existe!"
echo -e "Ajuda: ajuste o conteudo da variavel bl\n"
exit 1
fi
### verificando se existe o diretorio para armazenar os dumps #############################
if [ ! -d $bk ]; then
echo -e "\nErro: o diretorio de destino nao existe!"
echo -e "Ajuda: ajuste o conteudo da variavel bk\n"
exit 1
fi
### funcao de backup ##########################################################
function backup()
{
echo -e "\nIniciando backup de bancos mysql... $(date +%Y%m%d.%H%M%S)\n" | tee -a $ln
echo "Nome do servidor: $server"|tee -a $ln
echo "O script esta configurado para armazenar os ultimos ( $nb ) dumps..."|tee -a $ln
echo "O script esta ignorando os seguintes bancos: [ $be ]"|tee -a $ln
echo "Os bancos estao sendo salvos em: [ $bk ]"|tee -a $ln
echo -e "Os logs estao sendo salvos em: [ $bl ]\n"|tee -a $ln
echo "Buscando informacoes no mysql server..." | tee -a $ln
# fazendo dump banco a banco no mysql
for db in $(mysql -u$user -p$pass -B -s -e 'show databases;'| egrep -v $be); do
echo -e "\nefetuando backup do banco: [ $db ]" | tee -a $ln
# fazendo o dump dos bancos detectados
$_mysqldump --all --quick --user=$user --password=$pass $db | bzip2 -c > $bk/mysql.$db.$(date +%Y%m%d.%H%M%S).dump.bz2
echo "arquivo com dump do banco [ $db ] gerado!" | tee -a $ln
# rotina para limpeza de arquivos antigos
if [ $(ls -1 $bk/mysql.$db.*|wc -l) -gt $nb ];then
oldfile=$(ls -1 $bk/mysql.$db.* -r --sort=time|head -1)
echo "o arquivo antigo [ $oldfile ] esta sendo apagado..." | tee -a $ln
rm $oldfile
else
echo nao existem arquivos antigos a serem limpos... |tee -a $ln
fi
done
# fazendo dumpall do mysql
echo -e "\nefetuando backup tipo dump all" | tee -a $ln
mysqldump --host=$host --user=$user --password=$pass --all-databases | bzip2 -c > $bk/mysql.all-databases.$(date +%Y%m%d.%H%M%S).dump.bz2
echo "arquivo com o dump all gerado!"
# rotina para limpeza de arquivos antigos
if [ $(ls -1 $bk/mysql.all-databases.*|wc -l) -gt $nb ];then
oldfile=$(ls -1 $bk/mysql.all-databases.* -r --sort=time|head -1)
echo "o arquivo antigo [ $oldfile ] esta sendo apagado..." | tee -a $ln
rm $oldfile
else
echo nao existem arquivos antigos a serem limpos... |tee -a $ln
fi
# enviando e-mail
echo -e "\nBackup finalizando em $(date +%Y%m%d.%H%M%S)...\n"|tee -a $ln
echo -e "Enviando relatorio do dump via e-mail para: $email ...\n" |tee -a $ln
mail -s "mysql-dump do servidor ( $server )" $email < $ln
}
### rodando o script
backup
ajuste a permissão
chmod 700 script
agora crie os diretórios de dump e logs e depois ajuste as variáveis do script.
para rodar o script
./script

