Script de backup MySQL [melhorado]

Publicado por Jeferson R. Costa (última atualização em 19/04/2017)

[ Hits: 48.663 ]

Homepage: http://www.jefersonrc.com.br/

Download backup_sql.sh

Download 1490910669.backup_sql.sh (versão 2)




Na postagem anterior compartilhei um script que utilizada para backup de uma das minha base de dados, porém resolvi dar uma melhorada nele, pois tive alguns problemas com o restaure de backup gerados por aquele script. Tentei deixar o script mais dinâmico e com melhores combinações de parâmetros. Basicamente o script gera um arquivo .sql com combinações de INSERTs para que tanto o backup quanto o restaure fique mais rápido e o backup é feito com consistência para que não haja problemas posteriormente.

Obs.: para que o script funcione na parte da compactação bz2 é necessário instalar o pacote bzip2.

  



Versões atualizadas deste script

Versão 2 - Enviado por Matheus TSA em 30/03/2017

Changelog: Encontrei exatamente o que eu precisava tanto no código quanto nos comentários, por isso resolvi juntar tudo.

Download 1490910669.backup_sql.sh


Esconder código-fonte

#!/bin/bash

#################### SCRIPT PARA BACKUP MYSQL ####################
# Jeferson R. Costa <rc.jeferson@gmail.com>                      #
# Created Feb, 2013                                              #
# Update Feb, 2013                                               #

# Definindo parametros do MySQL
echo "  -- Definindo parametros do MySQL ..."
DB_NAME='dbname'
DB_USER='dbuser'
DB_PASS='dbpass'
DB_PARAM='--add-drop-table --add-locks --extended-insert --single-transaction -quick'

# Definindo parametros do sistema
echo "  -- Definindo parametros do sistema ..."
DATE=`date +%Y-%m-%d`
MYSQLDUMP=/usr/bin/mysqldump
BACKUP_DIR=/backup/mysql
BACKUP_NAME=mysql-$DATE.sql
BACKUP_TAR=mysql-$DATE.tar

#Gerando arquivo sql
echo "  -- Gerando Backup da base de dados $DB_NAME em $BACKUP_DIR/$BACKUP_NAME ..."
$MYSQLDUMP $DB_NAME $DB_PARAM -u $DB_USER -p$DB_PASS > $BACKUP_DIR/$BACKUP_NAME

# Compactando arquivo em tar
echo "  -- Compactando arquivo em tar ..."
tar -cf $BACKUP_DIR/$BACKUP_TAR -C $BACKUP_DIR $BACKUP_NAME

# Compactando arquivo em bzip2
echo "  -- Compactando arquivo em bzip2 ..."
bzip2 $BACKUP_DIR/$BACKUP_TAR

# Excluindo arquivos desnecessarios
echo "  -- Excluindo arquivos desnecessarios ..."
rm -rf $BACKUP_DIR/$BACKUP_NAME

Scripts recomendados

Backup incremental com montagem automática e e-mail

limpa_bkp_segunda_feira

Limpeza dos dados do rConfig (ferramenta open-source de gerenciamento de configuração

Backup Database MySQL Automatizado

Backup de arquivos com rsync


  

Comentários
[1] Comentário enviado por rriscado em 20/03/2013 - 14:38h

Amigo, Somente contribuindo....

Ao fazer o tar, vc pode incluir o parâmetro "j" que ja cria o tar com bzip2, isso exclui a necessidade de rodar o comando "bzip2" posteriormente.
Também pode inserir ao final do comando o parâmetro "--remove-files", que exclui os arquivos de origem e torna desnecessário o comando "rm -rf" posteriormente.
A linha ficaria assim: tar -cjf $BACKUP_DIR/$BACKUP_TAR -C $BACKUP_DIR $BACKUP_NAME --remove-files

Dúvidas consultar manual do tar com o comando "$man tar".

O restante do script está show!!!!

Abraço
Raphael Riscado

[2] Comentário enviado por rcjeferson em 20/03/2013 - 17:28h

Obrigado pela contribuição amigo... Vivendo e aprendendo...

[3] Comentário enviado por claudsan em 23/07/2013 - 16:10h

Show de bola!

[4] Comentário enviado por daniii10 em 10/09/2013 - 09:30h

Ola

Quais as partes do script que devo alterar para atender a minha base??

echo " -- Definindo parametros do MySQL ..."
DB_NAME='dbname'
DB_USER='dbuser'
DB_PASS='dbpass'
necessito alterar esta?

[5] Comentário enviado por rcjeferson em 10/09/2013 - 19:19h


[4] Comentário enviado por daniii10 em 10/09/2013 - 09:30h:

Ola

Quais as partes do script que devo alterar para atender a minha base??

echo " -- Definindo parametros do MySQL ..."
DB_NAME='dbname'
DB_USER='dbuser'
DB_PASS='dbpass'
necessito alterar esta?


Todos os parâmetros de MySQL e Sistema você deve alterar para que funcione corretamente. Lembrando que os parâmetros do sistema, pode ser que funcione da maneira que está, tendo que alterar somente se os diretórios dos arquivos forem diferentes no seu sistema. O parâmetro que deve se atentar é o diretório onde o backup será feito (BACKUP_DIR) para que fique no diretório que melhor se adequar ao seu sistema.

Qualquer coisa posta ai!

[6] Comentário enviado por joorlando3 em 20/04/2016 - 13:13h

Bom dia!

Obrigado, seu script me ajudou muito.


[7] Comentário enviado por vanbloc em 19/12/2016 - 16:41h

Muito bom!!!
No meu caso também adicionei as linhas abaixo para ele deletar os backups mais antigos (30 dias):

# Excluindo backups antigos
echo " -- Excluindo backups com mais de 30 dias ..."
find $BACKUP_DIR/* -mtime +30 -delete

[8] Comentário enviado por glmstz em 04/08/2017 - 10:20h

TOP, parabéns a todos...

Obrigado!

Att.,
Gustavo L. Moraes

[9] Comentário enviado por mpagliajr em 27/11/2017 - 00:02h

Eu tenho um grande problema, gerencio diversas VPS e faço diariamente backup do banco de dados de todas, porém meu maior problema é quando os clientes mudam usuário e senha do banco de dados. Existiria alguma forma de fazer um backup sem precisar usar usuário e senha?

[10] Comentário enviado por acsoprana em 17/07/2018 - 09:59h

Olá, muito bom seu script, mais poderia informar melhor o uso dos parâmetros:
DB_PARAM='--add-drop-table --add-locks --extended-insert --single-transaction -quick'

Grato.

[11] Comentário enviado por acsoprana em 17/07/2018 - 10:04h


[9] Comentário enviado por mpagliajr em 27/11/2017 - 00:02h

Eu tenho um grande problema, gerencio diversas VPS e faço diariamente backup do banco de dados de todas, porém meu maior problema é quando os clientes mudam usuário e senha do banco de dados. Existiria alguma forma de fazer um backup sem precisar usar usuário e senha?


Olá, vou tentar contribuir, seus clientes mudam a senha do banco em questão ou a do usuário ROOT do mysql?? porque se eles mudam apenas a de cada database vc não teria problema em fazer os backups porque vc usa a senha do ROOT.

[12] Comentário enviado por jfernandes em 27/11/2018 - 20:04h

Olá pessoal, antes de mais nada, parabéns pelo post, mas no meu caso, não deu certo.
Minha configuração é a seguinte ;
echo "-- Definindo parametros do MySQL --"
DB_NAME='zabbix_db'
DB_USER='root'
DB_PASS='12345'
DB_PARAM='--add-drop-table --add-locks --extended-insert --single-transaction -quick'
echo "-- Definindo paraEmetros do sistema --"
DATE=`date +%Y-%m-%d`
MYSQLDUMP=/usr/bin/mysqldump
BACKUP_DIR=/backup/mysql
BACKUP_NAME=mysql -$DATE.sql
BACKUP_TAR=mysql -$DATE.tar
echo "-- Gerando backup da base de dados $DB_NAME em $BACKUP_DIR/$BACKUP_NAME ..."
$MYSQLDUMP $DB_NAME $DB_PARAM -u $DB_USER -p$DB_PASS > $BACKUP_DIR/$BACKUP_NAME
echo "-- Compactando arquivo em tar ..."
tar -cf $BACKUP_DIR/$BACKUP_TAR -C $BACKUP_DIR $BACKUP_NAME
echo "-- Compactado arquivo em bzip2 ..."
bzip2 $BACKUP_DIR/$BACKUP_TAR
echo "-- Excluindo arquivos desnecessários ..."
rm - -rf $BACKUP_DIR/$BACKUP_NAME
E o erro aparece nas linhas 11 e 12 .
./backups.sh
-- Definindo parametros do MySQL --
-- Definindo paraEmetros do sistema --
./backups.sh: line 11: -2018-11-27.sql: command not found
./backups.sh: line 12: -2018-11-27.tar: command not found
-- Gerando backup da base de dados zabbix_db em /backup/mysql/ ...
./backups.sh: line 15: /backup/mysql/: Is a directory
-- Compactando arquivo em tar ...
tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.
-- Compactado arquivo em bzip2 ...
bzip2: Input file /backup/mysql/ is a directory.
-- Excluindo arquivos desnecessários ...
Se eu digitar mysql na console, eu consigo entrar no mysql .
Valeu galera .






[13] Comentário enviado por danilo759 em 25/02/2020 - 21:33h

Obrigado por compartilhar, tudo certo aqui.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts