Pular para o conteúdo

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.
leo genilhu leogenilhu
Hits: 49.240 Categoria: PHP Subcategoria: Banco de Dados
  • Indicar
  • Impressora
  • Denunciar

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!

   1. Introdução

PHP: Programando com segurança

Fazendo sua conexão remota por SSH mais segura

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

Sistema de identificação em rede (NIS)

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

Armazenando datas de uma outra forma

PHP com PostgreSQL - Estruturando a conexão

Servidor Web com Fedora Core 7

Stored Procedures usando o MySQL e PHP

#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

Contribuir com comentário

Entre na sua conta para comentar.