Backup de banco de dados MySQL com mysqldump

Publicado por Leonardo Macedo Cerqueira em 01/11/2012

[ Hits: 12.644 ]

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

Expandir ou aumentar discos de VMs (Virtual Machine) XEN

Monitorando tráfego da interface de rede em três comandos

Instalação do s3cmd - Storage S3 Amazon

Horário de verão 2012 - Debian Like e Red-Hat Like

SSH - Apagando conflitos de chaves RSA no arquivo known_hosts

Leitura recomendada

MySQL - Erro 1045: Access denied for user: 'root@localhost'

Exportando dados do MySQL para arquivos textos

MySQL: Erro: "mysqld dead but subsys locked" [Resolvido]

ERROR 144 - Table XXX is marked as crashed and last (automatic?) repair failed [Resolvido]

Ubuntu 6 com MySQL permitindo conexão remota

  

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