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.430 ]
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
PHP: Programando com segurança
Sistema de identificação em rede (NIS)
Segurança: Autenticando o PHP com HTTP (Authentication Required)
Fazendo sua conexão remota por SSH mais segura
Leitura recomendada
VirtualBox + Apache + PHP + SQL Server
Criando um contador de downloads com PHP e MySQL
Stored Procedures usando o MySQL e PHP
Provendo dados em um servidor PostgreSQL através do Apache e PHP
PHP com PostgreSQL - Estruturando a conexão
Comentários
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];
?>
Mensagem
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];
?>
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!!
Mensagem
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!!
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
Mensagem
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
Mensagem
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
Enviar