Olá! Quarta Feira, 08 de Fevereiro de 2012.



Dicas CódigoFonte.net
Quinta Feira, 26 de Novembro 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 "
    <fieldset>
    <legend>AVISOS!</legend>
    $msg<BR>
    </fieldset>
    ";


Abraços e até a próxima.

Alan Maia
Analista de Sistemas

<?php

//auto_backup.php

// configuração do seu banco
$host = 'host_do_servidor'; //
$user = 'nome_do_usuario';
$pass = 'senha_do_banco';
$db = 'nome_do_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 = "nome_do_arquivo_de_backup"; //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 . "-5 days"); //Aqui vc especifica intervalo entre o Backup
$calcula2=date('Y-m-d', $timestamp);

$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)
{

//Lista as tabelas de seu banco
$tables = mysql_list_tables($db);
$backup = '-- Yunie Auto Backup System - Adaptado por Alan Maia - alanmaia@amazoninfo.com.br
-- 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 .= '---- `'.$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))
  {
  $default = ' DEFAULT ''.$default.''';
  }
  else
  {
  $default = '';
  }
  $backup .= '`'.$fieldname.'` '.$type.' '.$null.''.$increment.''.$default.'';
  }
  if (!empty($primary_key))
  {
    $backup .= ',
    PRIMARY KEY (`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 = "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 Janeiro 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 Janeiro 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 Março de 2010 - 13:42
aff nao sei como criar uma pagina em php e f.o.d.a
Cleiton - 19 de Fevereiro 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 Agosto 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 - alanmaia@amazoninfo.com.br
-- Atualizado por Elielder Oliveira ( TagaNet Info )- taganet.info@gmail.com
-- 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."!";
}
?>
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 » CodigoFonte.eti.br » Compre De Tudo » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010

Procurando Notebooks, Câmeras Digitais, iPhones?

CompreDeTudo.com