Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Instalando Debian em maquina virtual
Por desk_mod
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Criando backup do MySQL com o mysqldump
Linux user
leogenilhu
11/01/2004
Neste artigo aprenderemos como utilizar o mysqldump para efetuar backup de tabelas e banco de dados do MySQL e também criaremos um script em PHP para automatizar este processo.
Por: leo genilhu
[ Hits: 34700 ]
Conceito: 10.0   2 voto(s)2 voto(s)2 voto(s)2 voto(s)2 voto(s) + quero dar nota ao artigo

Introdução

O mysqldump é um utilitário para descarregar um banco de dados ou uma coleção de bancos de dados para backup ou transferência para outro servidor SQL (não necessariamente um servidor MySQL) ou ainda apenas um backup em arquivo.

A descarga irá conter instruções SQL para criar a tabela e/ou popular a tabela.

As sintaxes para utilização do mysqldump são:

mysqldump [OPÇÕES] banco_de_dados [tabelas]
mysqldump [OPÇÕES] --databases [OPÇÕES] BD1 [BD2 BD3...]
mysqldump [OPÇÕES] --all-databases [OPÇÕES]


Se você não fornecer nenhuma tabela ou utilizar o --databases ou --all-databases, todo(s) o(s) banco(s) de dados será(ão) descarregado(s).

Para melhores informações, você ainda pode obter uma lista das opções que sua versão do mysqldump suporta executando:

$ mysqldump --help

Agora veja como seria um exemplo em PHP para executar o backup de todas as suas DATABASES em um arquivo separado para cada uma delas:

<?php
/**************************************************
  autor    : leo genilhu
  email    : leogenilhu@bol.com.br
  data     : 17/12/2003
  descrição: criar arquivo de backup do banco mysql
**************************************************/

$host = ""; // host do banco
$user = ""; // usuário do banco
$senha = ""; // senha do banco

$dbc = mysql_connect($host, $user, $senha);
$m   = mysql_select_db("test", $dbc);

$sql = "SHOW DATABASES";
$sts = mysql_query($sql,$dbc) or die (mysql_error());
$data = date("d-m-y");

while($row = mysql_fetch_array($sts)){
   $nome = $row[0];
   $NARQUIVO = $nome."-".$data;
   $resp = `mysqldump --host=$host --user=$user --password=$senha --databases $nome > /home/user/public_html/$NARQUIVO.sql` ;
}
$arquivo = "mysql_".$data;
// criar os pacotinhos com todos os arquivos.sql
$resp = `tar -cvzf /usr/backup/$arquivo.tar.gz /home/user/public_html/*.sql`;
$resp = `rm *.sql`;
?>

OBS: lembre sempre que o usuário citado no código deve ter "ALL PRIVILEGES" para que o script funcione normalmente. Para criar os pacotinhos, normalmente crio um diretório de backup dentro do /user, mas se você já tem um diretório de backup, apenas edite o path.

Aqui mostrei um exemplo onde utilizo o comando SQL "SHOW DATABASES", para que seja criado um arquivo nomedobanco.sql para cada banco, mas é claro, você pode otimizar de sua maneira.

Salve este arquivo como backup_mysql.php. Agora e só colocá-lo no cron para que sua execução seja automatizada.

Bom, é isso! Espero que possa ter servido para alguém. Qualquer dúvida e só postar que estaremos respondendo.

leogenilhu@bol.com.br

Um abraço!





Páginas do artigo
   1. Introdução

Outros artigos deste autor

Leitura recomendada

Comentários
[1] Comentário enviado por rafael.lamana em 11/01/2004 - 23:40h:

legal :D


[2] Comentário enviado por igtoth em 14/06/2004 - 09:27h:

Muito bom o conceito do script.... mas não roda! Fiz algumas correções e o resultado esta ai...

A proposito, caso você deseje que o backup seja feito automaticamente inclua a linha no cron da maquina:

#crontab -e

0 1 * * * /usr/bin/php -q /algum_lugar/backup.php

---------------------------------------------------

<?php

$nome_servidor="NOME_DO_SERVIDOR";
$local_backup="/algum_lugar/outra_pastas"

$host = "10.10.10.10"; // host do banco
$user = "usuario"; // usuário do banco
$senha = "senha"; // senha do banco

$msg[0]="---------------------------------------------------------------\n";
$msg[1]="Iniciando Script para backup do servidor $nome_servidor\n";
$msg[2]="Conectando ao banco... ";
$msg[3]="\n*** ERRO *** Impossivel conectar ao banco!";
$msg[4]="Fazendo backup do banco...\n";
$msg[5]="\tBACKUP OK!\n";
$msg[6]="*** ERRO *** Nao foi possivel fazer backup!\n";
$msg[7]="Criando pacote tar...\n";
$msg[8]="Apagando arquivos temporarios (sql)... ";
$msg[9]="\n\tPACOTE OK!\n";
$msg[10]="\n*** ERRO *** Nao foi possivel criar pacote tar!";
$msg[11]="\n*** ERRO *** Nao foi possivel apagar os arquivos temporarios!";

shell_exec("clear"); echo $msg[0]; echo $msg[1]; echo $msg[0];

// conectando ao banco

echo $msg[2];
$dbc = mysql_connect($host, $user, $senha);
if($dbc){
echo("\tOK!\n");
} else {
echo $msg[3];
$erro="echo $data - $msg[3] > $local_backup/erro.log";
shell_exec($erro);
exit();
}
$m = mysql_select_db("test", $dbc);

$sql = "SHOW DATABASES";
$sts = mysql_query($sql,$dbc) or die (mysql_error());
$data = date("Y-m-d");

// fazendo backup

echo $msg[0]; echo $msg[4];
while($row = mysql_fetch_array($sts)){
$nome = $row[0];
echo ("$nome\t\t=");
$NARQUIVO = $nome."-".$data;
$comando = "mysqldump --host=$host --user=$user --password=$senha --databases $nome > $local_backup/$NARQUIVO.sql";
if(shell_exec($comando)==""){
echo $msg[5];
} else {
echo $msg[6];
$erro="echo $data - $msg[6] > erro.log";
shell_exec($erro);
}
}

$arquivo = "Backup-MySQL-".$data."-".$nome_servidor;

// criar pacote com todos os arquivos .sql

echo $msg[0]; echo $msg[7];
$comando = "tar -cvzf $local_backup/$arquivo.tar.gz $local_backup/*.sql";
if(shell_exec($comando)){
echo $msg[9];
} else {
echo $msg[10];
$erro="echo $data - $msg[10] > $local_backup/erro.log";
shell_exec($erro);
}

// apagar arquivos .sql

echo $msg[0]; echo $msg[8];
$comando = "rm -f $local_backup/*.sql";
if(shell_exec($comando)==""){
echo("OK!\n");
} else {
echo $msg[11];
$erro="echo $data - $msg[11] > $local_backup/erro.log";
shell_exec($erro);
exit();
}

echo $msg[0];

?>

[3] Comentário enviado por cabox em 18/09/2007 - 20:58h:

Ae pessoal, tentei utilizar esse código acima, mas não aparece de jeito nenhum os arquivos.sql. ja verifiquei se o caminho esta errado e tal, e ta certo.
Uma duvida: Quando eu acesso o meu Mysql pelo shell eu preciso dar um "-p", caso contrário nao consigo entrar com nenhum usuario. O meu problema está relacionado a isso ou nao??

Espero pela resposta...abraço!!

[4] Comentário enviado por brunoestevao em 12/03/2008 - 14:57h:

Aqwui pra mim tb não está totalmente legal não

Abraços

Bruno Estêvão
www.sempihost.com.br
Hospedagem de sites com 30 dias grátis

[5] Comentário enviado por ronneesley em 21/03/2009 - 23:46h:

Olá, também fiz um script para backup só que em bash,
quem quiser pode acessar http://analistasi.com.br/?p=49 ou pesquisar no site www.analistasi.com.br


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.