Criando backup do MySQL com o mysqldump

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.

[ Hits: 48.468 ]

Por: leo genilhu em 11/01/2004


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

Segurança: Autenticando o PHP com HTTP (Authentication Required)

Fazendo sua conexão remota por SSH mais segura

Sistema de identificação em rede (NIS)

PHP: Programando com segurança

Leitura recomendada

PHP com PostgreSQL - Estruturando a conexão

Stored Procedures usando o MySQL e PHP

Provendo dados em um servidor PostgreSQL através do Apache e PHP

Configurando Apache + MySQL + Manipulação de dados com PHP

PDO - Introdução e conceitos

  
Comentários
[1] Comentário enviado por removido 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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts