Pular para o conteúdo

Script de backup MySQL [melhorado]

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.
Jeferson R. Costa rcjeferson
Hits: 49.207 Categoria: Shell Script Subcategoria: Backup
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Descrição

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.
Download backup_sql.sh Enviar nova versão
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Versões atualizadas deste script

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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Backup Máquina do Tempo com Rsync

Backup de arquivos e banco de dados com envio de e-mail

Backups automáticos de rádios Intelbras APC5

Backup RSYNC

Backup de Arquivos com RSync

#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

Entre na sua conta para comentar.