Pular para o conteúdo

Automatizando o processo de backup do MySQL

Dica publicada em Banco de Dados / MySQL
Fábio Berbert de Paula fabio
Hits: 58.490 Categoria: Banco de Dados Subcategoria: MySQL
  • Indicar
  • Impressora
  • 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.

Automatizando o processo de backup do MySQL

Nessa dica vamos ver como realizar um backup de um banco de dados do MySQLe como automatizar este processo de backup. Vamos partir do princípio que temos um banco de dados chamado meuBanco, na máquina localhostque é acessado pelo usuário armenio com senha jujuba.

Então vamos resumir as informações de nosso exemplo:
  • Database: meuBanco
  • Host: localhost
  • Username: armenio
  • Password: jujuba

O programa responsável pela realização de backup do MySQL é o mysqldump,que já vem distribuído junto com o banco de dados. O mysqldump gera um arquivo com comandos SQL que cria o esquema das tabelas de seu banco de dados e restauram os registros das tabelas. Vamos iniciar com um exemplo prático de como fazer um backup completo de nosso banco de dados:

$ mysqldump -h localhost -u armenio -pjujuba meuBanco > backup_meuBanco.sql

Bem simples não, no comando acima podemos perceber claramente que foi gerado um backup de nosso banco no arquivo backup_meuBanco.sql. O mysqldump possui diversas opções para realização de backup personalizado. Você pode configurá-lo para fazer cópia apenas das estruturas das tabelas, apenas os registros, escolher o tipo de sintaxe dos comandos SQL e afins. Digite "man mysqldump" para maiores informações.

Agora que aprendemos a fazer cópia de nosso banco de dados, vamos aprender a automatizar o processo de backup. Criaremos um simples script para realizaro backup e nomear as cópias nomeadas com a data atual.

#!/bin/sh
# mysqlBackup.sh

DATA=`/bin/date +%Y%m%d`

# NOME armazena o nome do arquivo de backup, neste casoi
# o diretório é /home/fabio/backup, configure aqui o seu
# diretório de backup
NOME="/home/fabio/backup/meuBanco-$DATA.sql"

# variáveis do MySQL
HOST="localhost"
USER="armenio"
PASSWORD="jujuba"
DATABASE="meuBanco"

mysqldump -h $HOST -u $USER -p$PASSWORD > $NOME

Uma vez criado o script mysqlBackup.sh, vamos agendar sua execução diária no cron. Neste exemplo quero que o script seja executado todos os dias às duas da manhã. Digite:

crontab -e

E adicione a linha:

0 2 * * * /bin/sh /home/fabio/mysqlBackup.sh
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.

Restaurar um backup é simples, basta você acessar o shell do MySQL e colar o conteúdo do arquivo gerado. Uma das formas de se restaurar um backup é a seguinte:

mysql -h localhost -u armenio -pjujuba meuBanco < meuBanco-20020924.sql

Onde meuBanco-20020924.sql é o arquivo com os comandos SQL.

Atenciosamente,
Fábio Berbert de Paula

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.

Lançamento do TupiServer Linux 1.0

Copiando arquivos e diretórios ocultos com rsync

Integrando o wget com o Netscape

Criando sua própria distribuição Linux

GIT - Como recuperar um arquivo deletado no teu repositório

Convertendo tabela Paradox .DB para MySQL

MySQL - Gerenciamento de memória

Restaurando backup de tabelas mySQL

ERROR 1045 (28000) no MySQL 5 - Ubuntu 6.06

Sistema gereciador de estoque em Gambas2

#1 Comentário enviado por lamss em 26/06/2004 - 19:04h
Oi, gostei de sua dica pois estava a procurar na net sobre como fazer um backup simples e eficiente... mas...

Só para uma pequena correção pois deu erro... na execução...

mysqldump -h $HOST -u $USER -p$PASSWORD $DATABASE > $NOME

valeu mutcho louco...
#2 Comentário enviado por eduengler em 01/09/2004 - 23:53h
não concordo com o colega..
testei o script e nada de BKP

este que disponho abaixo, fiz e é eficaz, dispõe comandos disposto dentro do man mysqldump
............................................

#!/bin/sh
# mysqlBackup.sh

DATA=`/bin/date +%d-%m-%Y`

# NOME armazena o nome do arquivo de backup.
# o diretório é /home/kurumin/mysql/backup, configure o seu.
NOME="/home/kurumin/mysql/backup/bkptest-$DATA.sql"

#DB é o nome do banco de dados, use o seu.
DB="test"

mysqldump --opt $DB > $NOME
#3 Comentário enviado por fabio em 01/09/2004 - 23:56h
Ué, seu MySQL roda sem senha? Tá acessando MySQL como root e sem senha meu colega!?!??????????????

kkkkkkkkkkkkkkk
#4 Comentário enviado por filype em 24/11/2005 - 08:57h
muito bom fábio...

Aqui só deu um problema com a data
#5 Comentário enviado por sapiras em 12/12/2005 - 16:07h
Na seguinte linha: DATA=`/bin/date +%d-%m-%Y

Qual o significado de DATA?
#6 Comentário enviado por higorcista em 14/06/2006 - 14:15h
DATA?!bom pelo oq eu entendi essa variavél DATA irá acrecentar no nome do arquivo a data atual q esta dentro do (arquivo/comando/diretório) /bin/date, e a data acrescenta no nome do arquivo saira na ondem de + %d dia, %m mês e %Y ano...espero q eu tenha interpretado certo!!rs
#7 Comentário enviado por balani em 15/07/2007 - 17:37h
Simples e eficaz
#8 Comentário enviado por eduardompozzi em 12/11/2007 - 11:29h
?comentario= Na verdade a data vai sair como Ano Mes e Dia que é o padrão do MySQL mesmo.. Só que como no linux isso tem que ser configurado vc mesmo coloca a bagaça.. xD..
De resto é o que o higorcista falou mesmo..
#9 Comentário enviado por brunorojo em 05/05/2008 - 16:09h
... Resolvido.
#10 Comentário enviado por brunorojo em 08/05/2008 - 19:41h
Vale lembrar que devem colocar o script na pasta do usuário, acredito q todos sejam padrão "/root/"

Quebrei q cabeça para descobrir isso.
#11 Comentário enviado por vinper em 10/07/2008 - 13:54h
Muito bom! Estou procurando algum artigo como esse para fazer o mesmo procedimento no postgre. Alguém ja testou esse procedimento com o postgre, e sabe algum turorial para realizar tal tarefa?? uso a versao 8.3. sou novato em linux e na comunidade hehehee
valew moçada
#13 Comentário enviado por natanaeltp em 23/04/2009 - 18:32h
Legal
Tem alguns detalhes que você esqueceu, o $DATABASE na linha de comando mysqldump
mysqldump -h $USER -u $USER -p$PASSWORD $DATABASE > $NOME

Valew.......
#14 Comentário enviado por lulled em 30/04/2010 - 11:51h
Mesmo após todos esses anos que este artigo foi escrito, ainda me ajudou hoje! Valeu :D
#15 Comentário enviado por kamikaze_df em 17/10/2011 - 20:48h
Beleza, mas funciona só com bancos pequenos ...

Tenho uma base gigantesca aqui, quase 2TB, sendo que o pessoal consulta tipo até 21h e as 5 da manhã já tem rotina automatizada gerando e baixando arquivo para rodar scripts de atualização.

Não tem como usar este método em bases grandes, primeiro a questão do espaço (tinha que adicionar um tar, gzip, 7z ...), depois o tempo, não exporta os dados em tempo hábil, depois se ainda fosse rodar um compactador em cima, demoraria ainda mais.

A dica é boa, mas lembrem-se, bancos pequenos ... qualquer coisa acima de 300GB é bom ver outras alternativas.

Abraço

Contribuir com comentário

Entre na sua conta para comentar.