Backup de banco de dados MySQL com mysqldump

Publicado por Leonardo Macedo Cerqueira em 01/11/2012

[ Hits: 12.566 ]

Blog: http://devopslab.com.br/

 


Backup de banco de dados MySQL com mysqldump



Este script faz um backup, diariamente, de todas as bases de dados do MySQL.

Eu adicionei uma linha a mais, opcional, para apagar backups antigos. Ou seja, o script funciona para um backup diário do MySQL, e apaga backups antigos (opcional).

No meu caso, vai apagar todos os backups de 20 dias. Eu só preciso guardar 20 dias de backups, mas você pode colocar a quantidade de dias que for de sua necessidade.

#!/bin/bash
#Script de backup de banco de dados Mysql.
#Leonardo Macedo Cerqueira - leonardo.macedo.c@gmail.com

DATA=$(date +"%d-%m-%Y") #definição de variável para a data dos backups.
DEST="/backup/mysql" #pasta de destino do backup.
DESTDAY="${DEST}/bkp-mysql-$DATA/" #pasta de backup diario

# Login do usuario root do mysql:
MUSER="root"                #login do usuario administrativo do mysql.
MPASS=''senha_do_root_mysql"   # senha.
MHOST="127.0.0.1"       #ip que o mysql esta up. no caso localhost

#Caminhos dos binarios: mysql, gzip e mysqldump.
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"

#Rotina de Backup.
[ ! -d "${DEST}" ] && mkdir -p "${DEST}"
### consultando todas os bancos/bases de dados do mysql:
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
/bin/mkdir -p $DESTDAY
FILE=${DEST}/bkp-mysql-$DATA/banco-${db}.${DATA}.gz
### execucao do backup
$MYSQLDUMP --single-transaction -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done

#Apagando backups antigos
#Opcional. apaga PASTA de backups de 20 dias.
DATAREMOVE=$(date -d "20 day ago" +"%d-%m-%Y")
/bin/rm -rf ${DEST}/bkp-mysql-$DATAREMOVE

Por fim, basta colocar o script no Cron, para que seja feito um backup diário:

#Backup executado todos os dias, as 02:00hrs.
00   02   *   *   *   /etc/init.d/backup-mysql.sh

Abraços.

Leonardo Macedo Cerqueira

Outras dicas deste autor

Liberar o FTP no IPtables

Alta disponibilidade - HA - Channel Bonding em 5 minutos - CentOS 6.x

Instalação do plugin Java no Google Chrome

Expandir ou aumentar discos de VMs (Virtual Machine) XEN

Utilizando o SCP em vários servidores sem pedir senha

Leitura recomendada

Recriar replicação no MySQL de maneira fácil

Mysqldump no cron do Slackware

Nova versão recomendada do MySQL

Exportando uma tabela do MySQL

Criando e associando usuários à bancos de dados específicos

  

Comentários
[1] Comentário enviado por SMagnus em 03/12/2012 - 10:24h

Estou com um problema,
tenho um Banco de Dados em MySQL de 3Gb que é existente a 4 anos e ele é feito pela ferramenta eZPublish ao começar a importar uma das maiores tabelas perto do insert de valor 596(numero de insert até o momento da tabela) ele entra em um Loop infinito e não permite o termino do insert.. quando você abre o arquivo em os editores de texto dão problemas e o vi não consegue lelo direito... como posso quebra-lo em partes ou só fazer o backup por tabela... você pode me ajudar com isso????

[2] Comentário enviado por rodrigoKulb em 15/02/2014 - 23:57h

Parabéns Leonardo,

Esse foi o melhor script de bkp mysql que já encontrei!

Completo e o melhor faz de toda a base separando os arquivos para cada Base.

Show!

Apenas avisar as pessoas que se copiar e colar o código acima cuidado pois existe um erro de aspas "" em MPASS=''senha_do_root_mysql'

flw!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts