Olá! Monday, 18 de March de 2024.



Dicas CódigoFonte.net
Thursday, 26 de November de 2009

Agendar Backup Automático do Banco de Dados Mysql

Em minha primeira contribuição divulgarei um método simples de como realizar o Backup Automático de seu banco de dados através de agendamento por data. Assim você pode especificar um espaço de tempo para que o script faça o Backup automático e salve o arquivo .sql onde você quiser no seu HD.

Espero que esta contribuição possa ajudar a quem precisa.

Parte dele foi adaptado através de pesquisas na internet.

Para chamar insira este código no arquivo que você deseja usar o auto_backup:

include("auto_backup.php"); print "    
    AVISOS!     $msg
   
    ";


Abraços e até a próxima.

Alan Maia
Analista de Sistemas

0)   {     $backup .= '     INSERT INTO `'.$tablename.'` '.$fields_list.' VALUES     ';     $insert_num = 0;     while ($rows_result = mysql_fetch_assoc($rows_fields))     {       $insert_num++;       $field_num = 1;       $backup .= '(';       foreach(array_keys($rows_result) as $keys)       {         $value = $rows_result[$keys];         $value = str_replace("'","''",$value);         if (!is_numeric($value))         {         $backup .= "'".$value."'";         }         else         {         $backup .= $value;         }         if ($field_num != sizeof($rows_result))         {         $backup .= ',';         }         $field_num++;       }       $backup .= ')';       if ($insert_num == $inserts)       {         $backup .= ';';       }       else       {         $backup .= ',         ';       }     }   }   $backup .= '   '; }   //Se no config estiver true visualiza num text area as instruções SQL   if ($print_result == true)   {     //Aqui vc pode imprimir num text area as instruções SQL pra mim não é necessário     //por isso está comentado para visualizar é só descomentar     //echo '';   }   //Se noconfig estiver true salva em arquivo .sql as instruções SQL   if ($save_backup == true)   {     //Aqui vc define o diretório onde o arquivo deve ser salvo     //Pode ser escrito como c:/pasta/bkp/     //Pode ser qualquer unidade inclusive na rede basta a pasta ter permissão     //Não esqueça de terminar o diretoírio com a barra /     $dir = "d:/bkp_dados/";     $file = fopen($dir.$backup_file_name.'_'.date("dmy", time()).'.'.$backup_file_format.'', "w+");     fwrite($file, $backup);    fclose($file);   }   //Aqui aconselho a criar uma tabela para gravar a data do ultimo backup e atualizar para data atual   //Assim quando entrar no sistema a rotina irá verificar se há necessidade de backup   //de acordo com o cálculo no inicio do código   $update ="UPDATE `data_backup` SET `ultimo_backup` = '$new_data' WHERE `id` ='$id'";   $exec_update = mysql_query($update);   $msg = "Backup Realizado com sucesso!"; } else {   $msg = "Não foi necessário realizar o Backup!"; } ?>

Comentários do artigo [Novo comentário]

marcelo - 01 de January de 2010 - 11:43
olá Alan... kra, eu adorei seu código.. to precisando e muito de fazer um back-up do meu bd aqui do meu trabalho porém qdo eu fui usar seu codigo deu erro na linha 86 --> $default = ' DEFAULT ''.$default.''';
o erro foi este : Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in D:\paginas\intranet\auto_backup.php on line 86

vc sabe me dizer como arrumar?

abraços e obrigado

Alan Demberguer Carneiro Maia - 02 de January de 2010 - 00:02
Caro amigo verifique o comando se está da seguinte forma:

$default = 'DEFAULT ".$default." ';

Pois no código acima a codificação do site pode ter trocado a aspas por apóstrofos.

Abraços

Alan Maia
Jardel.Martins - 18 de March de 2010 - 13:42
aff nao sei como criar uma pagina em php e f.o.d.a
Cleiton - 19 de February de 2011 - 18:11
é preciso mudar o nome da variável nos trechos:

$calcula2=date('Y-m-d', $timestamp);
para:
$calcula2=date('Y-m-d', $calcula);

e

$update ="UPDATE `data_backup` SET `ultimo_backup` = '$new_data' WHERE `id` ='$id'";

para

$update ="UPDATE `data_backup` SET `ultimo_backup` = '$nova_data' WHERE `id` ='$id'";

No mais... muito obrigado!!!
Elielder Oliveira - 07 de August de 2011 - 10:15
Pessoal, corrigi a pagina de script ( correções importantes )
Postei para no caso de não conseguirem importar o backup esta ai a configuração correção.

Agradeço ao Alan e ao Cleito, pois o script de um e a correção do outro me ajudaram a exportar o backup e somente após isto foi possível identificar alguns erro e corrigi-los para a importação com sucesso.

Qualquer coisa estamos ai!

Vlw!


<?php
include('Connections/DAITAKE_DATA.php');
//auto_backup.php

// configuração do seu banco
$host = $hostname_DAITAKE_DATA; //Seu host, normalmente localhost
$user = $username_DAITAKE_DATA; //Seu usuario, normalmente root
$pass = $password_DAITAKE_DATA; //Sua senha, normalmente em branco ou root
$db = $database_DAITAKE_DATA; // Seu Banco de Daddos
$print_result = true; //true para imprimir aba, false para não imprimir
$save_backup = true; //true para salvar, false para não salvar
$backup_file_name = $db; //Nome do arquivo, se $save_backup estiver ativado - caso ficara o nome do Banco de Dados
$backup_file_format = "sql"; // formato da extensão (Banco de dados_07-08-2011.sql)
// fim configuração do banco

$con = mysql_connect($host,$user,$pass);
mysql_select_db($db);

//Pega as datas e calcula o tempo do última backup
$nova_data = date("Y-m-d");
$calcula = strtotime($nova_data . "0 days"); //Aqui vc especifica intervalo entre o Backup, para diario especificar 0 days.
$calcula2=date('Y-m-d', $calcula);

$verifica = "select * from data_backup";
$exec_verifica = mysql_query($verifica);
while ($row = mysql_fetch_array($exec_verifica))
{
$id = $row["id"];
$data = $row["ultimo_backup"];
}

//Verifica se a data do último backup é igual ao calculado pelo intervalo
//Se for igual quer dizer que o backup deve ser efetuado
if ($calcula2>$data) //correção: alterei de == ( igual ) para > ( maior ), pois caso o intervalo calculado seja maior ao
// especificado será efetuado o backup
//obs: para diario deixar os sinais == ( igual )
{

//Lista as tabelas de seu banco
$tables = mysql_list_tables($db);
$backup = '-- Yunie Auto Backup System - Adaptado por Alan Maia - [email protected]
-- Atualizado por Elielder Oliveira ( TagaNet Info )- [email protected]
-- Crédito: Alan Maia / Cleiton /
-- -----------------------------------------------------------
-- Servidor: '.$host.'
-- Banco de Dados: '.$db.'
-- Data: '.date("d/m/y", time()).'
--
-- ------------------------------------------------------------
';

$backup .= '';
//Rotina para criar arquivo com as instruções SQL
while ($tables_result = mysql_fetch_assoc($tables))
{
$tablename = $tables_result['Tables_in_'.$db.''];
$backup .= '---- Estrutura da tabela `'.$tablename.'` --
-- ----------------------------------------------------------

';
$backup .= 'DROP TABLE IF EXISTS `'.$tablename.'`;
CREATE TABLE IF NOT EXISTS `'.$tablename.'`
(';
$fieldname = '';
$fields_array = array();
$table_fields = mysql_query("SHOW COLUMNS FROM `".$tablename."`");
$primary_key = '';
while ($fields_result = mysql_fetch_assoc($table_fields))
{
if (!empty($fieldname))
{
$backup .= ',
';
}
$fieldname = $fields_result['Field'];
$fields_array[] = $fieldname;
$type = $fields_result['Type'];
$primary = '';
$increment = '';
if ($fields_result['Extra'] == 'auto_increment')
{
$increment = ' AUTO_INCREMENT';
}
$null = 'NULL';
if ($fields_result['Null'] == 'NO')
{
$null = 'NOT NULL';
}
if ($fields_result['Key'] == 'PRI')
{
$primary_key = $fieldname;
}
$default = $fields_result['Default'];
if ($default && empty($increment))
{
$null = ''; // correção: para não imprimir NULL quando houver default
$default = "DEFAULT '".$default."'"; //correção: imprimir os dados de default dentro de aspas simples
}
else
{
$default = '';
}
$backup .= '`'.$fieldname.'` '.$type.' '.$null.''.$increment.''.$default.'';
}
if (!empty($primary_key))
{
$backup .= ',
PRIMARY KEY (`'.$primary_key.'`)'; // correção: imprime o nome da chave primaria, pois estava como id
}
$backup .= '
);';
$fields_list = '(';
$field_num = 1;
foreach(array_keys($fields_array) as $keys)
{
$fields_list .= '`'.$fields_array[$keys].'`';
if ($field_num != sizeof($fields_array))
{
$fields_list .= ', ';
}
$field_num++;
}
$fields_list .= ')';
$rows_fields = mysql_query('SELECT * FROM `'.$tablename.'`');
echo mysql_error();
$inserts = mysql_num_rows($rows_fields);
if ($inserts > 0)
{
$backup .= '
INSERT INTO `'.$tablename.'` '.$fields_list.' VALUES
';
$insert_num = 0;
while ($rows_result = mysql_fetch_assoc($rows_fields))
{
$insert_num++;
$field_num = 1;
$backup .= '(';
foreach(array_keys($rows_result) as $keys)
{
$value = $rows_result[$keys];
$value = str_replace("'","''",$value);
if (!is_numeric($value))
{
$backup .= "'".$value."'";
}
else
{
$backup .= $value;
}
if ($field_num != sizeof($rows_result))
{
$backup .= ',';
}
$field_num++;
}
$backup .= ')';
if ($insert_num == $inserts)
{
$backup .= ';';
}
else
{
$backup .= ',
';
}
}
}
$backup .= '
';
}
//Se no config estiver true visualiza num text area as instruções SQL
if ($print_result == true)
{
//Aqui vc pode imprimir num text area as instruções SQL pra mim não é necessário
//por isso está comentado para visualizar é só descomentar
//echo '<textarea rows="30" cols="100" wrap="OFF">'.$backup.'</textarea>';
}
//Se noconfig estiver true salva em arquivo .sql as instruções SQL
if ($save_backup == true)
{
//Aqui vc define o diretório onde o arquivo deve ser salvo
//Pode ser escrito como c:/pasta/bkp/
//Pode ser qualquer unidade inclusive na rede basta a pasta ter permissão
//Não esqueça de terminar o diretoírio com a barra /
$dir = "SQL/";
$file = fopen($dir.$backup_file_name.'_'.date("d-m-Y", time()).'.'.$backup_file_format.'', "w+");
//correção: o mome sera banco de dados_dia-mes-ano.sql ( 00-00-0000 )
fwrite($file, $backup);
fclose($file);
}

//Aqui aconselho a criar uma tabela para gravar a data do ultimo backup e atualizar para data atual
//Assim quando entrar no sistema a rotina irá verificar se há necessidade de backup
//de acordo com o cálculo no inicio do código
$update ="UPDATE `data_backup` SET `ultimo_backup` = '$nova_data' WHERE `id` ='$id'";
$exec_update = mysql_query($update);
$msg = "Backup Realizado com sucesso!";
}
else
{
// Variavel $data recebendo uma data no padrão (dd/mm/aaaa)
$data = $data;
// Variavel aux2 fazendo o explode separando pelo caracter '/'
$aux2 = explode('-',$data);
// Exibe a data no formato para inserir no MySQL (aaaa-mm-dd)
if($data > 0){
$databr = $aux2[2]."/".$aux2[1]."/".$aux2[0];
}
$msg = "Não foi necessário realizar o Backup! O ultimo Backup foi realizado ".$databr."!";
}
?>
Saulo Borges - 23 de March de 2012 - 02:37
Boa noite a todos, utilizei este código em um sistema que tenho aqui e foi perfeito, porém algumas de minhas tabelas tem primary keys compostas de 2 campos e notei que o sistema não trata esse caso em específico.
Gostaria de alguma dica para conseguir incluir essa função neste script, onde devo procurar e como devo procurar pois não conheço muito bem os métodos nativos o mysql . Obrigado pelo script!
João Augusto Miranda - 18 de September de 2012 - 10:14
Bom dia, tive alguns problemas aqui na hora de utilizar o script se puder me ajudar



Warning: mysql_fetch_assoc() expects parameter 1 to be resource, string given in C:xampphtdocsprototipoauto_backup.php on line 55

Warning: fopen(SQL/mascote_18-09-2012.sql) [function.fopen]: failed to open stream: No such file or directory in C:xampphtdocsprototipoauto_backup.php on line 187

Warning: fwrite() expects parameter 1 to be resource, boolean given in C:xampphtdocsprototipoauto_backup.php on line 189

Warning: fclose() expects parameter 1 to be resource, boolean given in C:xampphtdocsprototipoauto_backup.php on line 190

Notice: Undefined variable: id in C:xampphtdocsprototipoauto_backup.php on line 196
AVISOS! Backup Realizado com sucesso!

aparece isso na tela porem não realiza o back up
Neto Almeida - 17 de May de 2016 - 03:57
e aí galera, fiz algumas alterações aqui pra poder rolar no mysql e poder usar na web:






//Backup automático
<?php

$host = 'localhost'; //
$user = 'root';
$pass = '';
$db = 'banco';
$print_result = true; //true para imprimir aba, false para não imprimir
$save_backup = true; //true para salvar, false para não salvar
$backup_file_name = "Backup_Banco"; //Nome do arquivo, se $save_backup estiver ativado
$backup_file_format = "sql"; // formato da extensão (automatic_backup_140409.sql)
// fim configuração do banco

$con = mysql_connect($host,$user,$pass);
mysql_select_db($db);

//Pega as datas e calcula o tempo do última backup
$nova_data = date("Y-m-d");
$calcula = strtotime($nova_data . "-1 days"); //Aqui vc especifica intervalo entre o Backup
$calcula2=date('Y-m-d', $calcula);

$verifica = "select * from backup_auto";
$exec_verifica = mysql_query($verifica);
while ($row = mysql_fetch_array($exec_verifica))
{
$id = $row["id"];
$data = $row["ultimo_backup"];
}

//Verifica se a data do último backup é igual ao calculado pelo intervalo
//Se for igual quer dizer que o backup deve ser efetuado
if ($calcula2==$data)
{

//Lista as tabelas de seu banco
$tables = mysql_list_tables($db);
$backup = '/* Yunie Auto Backup System - Adaptado por Alan Maia - [email protected]
-- Database: '.$db.'
-- Date: '.date("d/m/y", time()).'*/';

$backup .= '';

//Rotina para criar arquivo com as instruções SQL
while ($tables_result = mysql_fetch_assoc($tables))
{
$tablename = $tables_result['Tables_in_'.$db.''];
$backup .= '/* Estrutura da tabela `'.$tablename.'` */';
//$backup .= '---- `'.$tablename.'` table --';
$backup .= 'DROP TABLE IF EXISTS `'.$tablename.'`;
CREATE TABLE IF NOT EXISTS `'.$tablename.'`
(
';
$fieldname = '';
$fields_array = array();
$table_fields = mysql_query("SHOW COLUMNS FROM `".$tablename."`");
$primary_key = '';
while ($fields_result = mysql_fetch_assoc($table_fields))
{
if (!empty($fieldname))
{
$backup .= ',
';
}
$fieldname = $fields_result['Field'];
$fields_array[] = $fieldname;
$type = $fields_result['Type'];
$primary = '';
$increment = '';
if ($fields_result['Extra'] == 'auto_increment')
{
$increment = ' AUTO_INCREMENT';
}
$null = 'NULL';
if ($fields_result['Null'] == 'NO')
{
$null = 'NOT NULL';
}
if ($fields_result['Key'] == 'PRI')
{
$primary_key = $fieldname;
}
$default = $fields_result['Default'];
if ($default && empty($increment))
{
$null = '';
$default = 'DEFAULT ".$default." ';
}
else
{
$default = '';
}
$backup .= '`'.$fieldname.'` '.$type.' '.$null.''.$increment.''.$default.'';
}
if (!empty($primary_key))
{
$backup .= ',
PRIMARY KEY (`'.$primary_key.'`)'; // correção: imprime o nome da chave primaria, pois estava como id
}
$backup .= '
);';
$fields_list = '(';
$field_num = 1;
foreach(array_keys($fields_array) as $keys)
{
$fields_list .= '`'.$fields_array[$keys].'`';
if ($field_num != sizeof($fields_array))
{
$fields_list .= ', ';
}
$field_num++;
}
$fields_list .= ')';
$rows_fields = mysql_query('SELECT * FROM `'.$tablename.'`');
echo mysql_error();
$inserts = mysql_num_rows($rows_fields);
if ($inserts > 0)
{
$backup .= '
INSERT INTO `'.$tablename.'` '.$fields_list.' VALUES
';
$insert_num = 0;
while ($rows_result = mysql_fetch_assoc($rows_fields))
{
$insert_num++;
$field_num = 1;
$backup .= '(';
foreach(array_keys($rows_result) as $keys)
{
$value = $rows_result[$keys];
$value = str_replace("'","''",$value);
if (!is_numeric($value))
{
$backup .= "'".$value."'";
}
else
{
$backup .= $value;
}
if ($field_num != sizeof($rows_result))
{
$backup .= ',';
}
$field_num++;
}
$backup .= ')';
if ($insert_num == $inserts)
{
$backup .= ';';
}
else
{
$backup .= ',
';
}
}
}
$backup .= '
';
}
//Se no config estiver true visualiza num text area as instruções SQL
if ($print_result == true)
{
//Aqui vc pode imprimir num text area as instruções SQL pra mim não é necessário
//por isso está comentado para visualizar é só descomentar
//echo '<textarea rows="30" cols="100" wrap="OFF">'.$backup.'</textarea>';
}
//Se noconfig estiver true salva em arquivo .sql as instruções SQL
if ($save_backup == true)
{
//Aqui vc define o diretório onde o arquivo deve ser salvo
//Pode ser escrito como c:/pasta/bkp/
//Pode ser qualquer unidade inclusive na rede basta a pasta ter permissão
//Não esqueça de terminar o diretoírio com a barra /
$dir = "/home/site/public_html/pasta_de_backup/"; // aqui tá o segredo pra web, tem que colocar a pasta de destino como 777 e pegar desde o endereço desde a raiz
$file = fopen($dir.$backup_file_name.'_'.date("d-m-Y", time()).'.'.$backup_file_format.'', "w+");
fwrite($file, $backup);
fclose($file);
}

//Aqui aconselho a criar uma tabela para gravar a data do ultimo backup e atualizar para data atual
//Assim quando entrar no sistema a rotina irá verificar se há necessidade de backup
//de acordo com o cálculo no inicio do código
$update ="UPDATE `backup_auto` SET `ultimo_backup` = '$nova_data' WHERE `id` ='$id'"; $exec_update = mysql_query($update);
$msg = "Backup Realizado com sucesso!";
}
else
{
$msg = "Não foi necessário realizar o Backup!";
}

Para adicionar um comentário você deve efetuar o login


Gostou do CódigoFonte.net? Quer indicar a um amigo?
Preencha os campos a seguir.
Seu Nome:
Seu E-mail:
E-mail de seu Amigo:


CodigoFonte.net » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010