Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paulo Henrique_196640

BackUp do banco de dados Mysql

Recommended Posts

Cara, já li e reli um monte de coisas sobre backup do mysql, mas ainda não consegui fazer o sistema que faça o download e o upload do Banco de dados pelo sistema em PHP..

Quem tiver um sistema aí, ou um topico pra mim ler,, deixa aí nas respostas por favor..

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara tu ta falando fazer o backup pelo phpmyadmin?

 

é barbada cara

 

Seleciona o banco que tu quer faze ro backup, vai em exportar nas abas do menu, e seleciona executar.

 

Importar é praticamente a mesma coisa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você vai precisar dar um DUMP no banco de dados, ou seja, você vai precisar passar pelo banco todo e gerar o SQL referente a ele. Isso é extremamente complicado (não é nem difícil, é trabalhoso), mas você pode pesquisar como fazer dump de databases pelo PHP no MySQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui corrigir esse script PHP, agora como restaurar esse o BD ?

<?php
    //DADOS PARA CONEXÃO
    $usuario = "root";
    $senha = "123";
    $dbname = "test";
    // use true se quiser remover caracteres que não sejam utf-8
    $checkUtf = true;
    
// conectando ao banco
    mysql_connect("localhost", $usuario, $senha) or die(mysql_error());
    mysql_select_db($dbname) or die(mysql_error());

// gerando um arquivo sql. Como?
// a função fopen, abre um arquivo, que no meu caso, será chamado como: nomedobanco.sql
// note que eu estou concatenando dinamicamente o nome do banco com a extensão .sql.
    $back = fopen($dbname . ".sql", "w");

// aqui, listo todas as tabelas daquele banco selecionado acima
    $res = mysql_query("SHOW TABLES FROM $dbname") or die(mysql_error());

    // ultra importante para não dar erro nos primeiros inserts
    // principalmente de usar InnoDB e relacionar as tabelas
    fwrite($back, "set foreign_key_checks=0;\n\n");
    
    // regex para ver se o char é UTF-8
    // Link: http://stackoverflow.com/questions/1401317/remove-non-utf8-characters-from-string
    $regex1 = <<<'END'
/
  ( [\x00-\x7F]                 # single-byte sequences   0xxxxxxx
  | [\xC0-\xDF][\x80-\xBF]      # double-byte sequences   110xxxxx 10xxxxxx
  | [\xE0-\xEF][\x80-\xBF]{2}   # triple-byte sequences   1110xxxx 10xxxxxx * 2
  | [\xF0-\xF7][\x80-\xBF]{3}   # quadruple-byte sequence 11110xxx 10xxxxxx * 3 
  )
| .                             # anything else
/x
END;
    
// resgato cada uma das tabelas, num loop
    while ($row = mysql_fetch_row($res)) 
    {
        $table = $row[0];
// usando a função SHOW CREATE TABLE do mysql, exibo as funções de criação da tabela,
// exportando também isso, para nosso arquivo de backup
        $res2 = mysql_query("SHOW CREATE TABLE $table");
// digo que o comando acima deve ser feito em cada uma das tabelas
        while ($lin = mysql_fetch_row($res2)) {
// instruções que serão gravadas no arquivo de backup
            fwrite($back, "\n#\n# //Criação da Tabela : $table\n#\n\n");
            fwrite($back, "$lin[1] ;\n\n#\n# //Dados a serem incluídos na tabela\n#\n\n");

// seleciono todos os dados de cada tabela pega no while acima
// e depois gravo no arquivo .sql, usando comandos de insert
            $res3 = mysql_query("SELECT * FROM $table");
            $first = true;
            while ($r = mysql_fetch_row($res3)) 
            {
                if ($first)
                {
                    $sql = "INSERT INTO $table VALUES ";
                    $first = false;
                }
                else
                {
                    $sql .= ',';
                }
                
                
                $sql .= "('";
                
                $imploded = '';
                
                $firstImplode = true;
                
                foreach ($r as $reg) 
                {
                    if ($firstImplode)
                    {
                        $firstImplode = false;
                    }
                    else
                    {
                        $imploded .= "', '";
                    }
                    
                    if ($checkUtf)
                    {
                        $escaped = str_replace('\'', "\\'", str_replace('\\', "\\\\", preg_replace($regex1, '$1', $reg)));
                    }
                    else 
                    {
                        $escaped = str_replace('\'', "\\'", str_replace('\\', "\\\\", $reg));
                    }
                    $imploded .= $escaped;
                }
                
                $sql .= $imploded;
                
                $sql .= "')\n";

            }
            if (!$first)
            {
                $sql .= ";\n";
                fwrite($back, $sql);
            }
        }
    }

// fechar o arquivo que foi gravado
    fclose($back);
// gerando o arquivo para download, com o nome do banco e extensão sql.
    $arquivo = $dbname . ".sql";
    Header("Content-type: application/sql");
    Header("Content-Disposition: attachment; filename=$arquivo");
// lê e exibe o conteúdo do arquivo gerado
    readfile($arquivo);
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para restaurar você pode simplesmente executar o SQL dentro deste arquivo. Você já usou o Fopen para gravar, agora leia o que está gravado e execute uma query simples no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para restaurar você pode simplesmente executar o SQL dentro deste arquivo. Você já usou o Fopen para gravar, agora leia o que está gravado e execute uma query simples no banco.

 

Cara já pensei nisso mas não dei conta de fazer o script,, seria possível vc me ajudar?

e outra coisa seria como eu iria mandar esse arquivo, através de um post com input-file?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mandar pra onde?

 

Bom, você tem o script já pronto, se você conseguiu escrever o dump em um arquivo de texto basta você pesquisar esses tópicos:

 

https://www.google.com.br/search?q=run+query+mysql+php&oq=run+query+mysql+php&aqs=chrome..69i57.5553j0&sourceid=chrome&ie=UTF-8

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mandar pra onde?

 

Bom, você tem o script já pronto, se você conseguiu escrever o dump em um arquivo de texto basta você pesquisar esses tópicos:

 

https://www.google.com.br/search?q=run+query+mysql+php&oq=run+query+mysql+php&aqs=chrome..69i57.5553j0&sourceid=chrome&ie=UTF-8

 

Valew pela a ajuda.

Olha só, estou lendo o arquivo da seguinte forma

 

<?php 
$banco = "" ;
if (count($_POST)){ 
$arquivo = $_FILES['arquivoTXT']; 
$ponteiro = fopen ($arquivo['tmp_name'], 'r'); 
while (!feof ($ponteiro)) { 
$linha = fgets($ponteiro, 4096);
$banco .= $linha;
}
fclose ($ponteiro); 
} 
?>
<form action="" method="post" enctype="multipart/form-data" name="cadastro" > 
<input type="file" name="arquivoTXT" value="Selecionar" size="87" />
<br />
<input type="submit" name="cadastrar" value="Ler Arquivo" /> 
</form>
<form action="restaurar.php" method="get" name="enviar" target="_blank">
<textarea name="banco" cols="100" rows="25" id="banco"><?php echo $banco; ?></textarea><br />
<input name="Criar BD" type="submit" value="Criar BD" id="Criar BD" /></form>

na página restaurar.php

 

<?php

$banco = $_GET['banco'];
  // CONEXÃO MySQL
  $con = mysql_connect("localhost","root","");

  // CRIAR TABELA
  if (mysql_select_db("test", $con))
  {
	  echo "ok <br>";
  }
  else
  {
	echo "erro: " . mysql_error();     
	  } ;
  $sql = $banco;
 if ($sql){
	  echo "OK <br>";
	  }
else 
{ 
      echo "ERRO" . mysql_error();
	}
	
  mysql_query($sql,$con);
  mysql_close($con);
  ?>

 

Consegui criar tabelas fazendo testes, mas não consegui ""restaurar"" o bd com as tabelas e os dados das tabelas do backup...

Mais uma vez, valew pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca o conteúdo do arquivo em uma string e passa ela como parâmetro em uma query. Depois você faz a verificação se a query foi executada com sucesso ou não...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloca o conteúdo do arquivo em uma string e passa ela como parâmetro em uma query. Depois você faz a verificação se a query foi executada com sucesso ou não...

 

Valew, vou tentar aqui

 

 

Coloquei o mysql_error() pra ver qual seria o erro, achei, o problema é que o INSERT INTO do arquivo não está executando.

 

 

Exemplo do arquivo sql que estou tentando executar

 

CREATE TABLE IF NOT EXISTS `clientes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(150) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

--
-- Extraindo dados da tabela `clientes`
--

INSERT INTO `clientes` (`id`, `nome`) VALUES
(1, 'Paulo Henrique', \r\n');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema e que executa apenas um tipo de variável MySQL ou seja se coloco só CREATE TABLE executa e assim por diante todos os comandos, mas quando eu tento carregar o arquivo com o CREATE TABLE e o INSERT INTO juntos,, não executa,,

 

Só falta resolver isso, executar o CREATE TABLE e o INSERT INTO em uma query

 

\r\n já retirei

 

(1, 'Paulo Henrique', \r\n')



Qual seria o comando ""QUERY"" para executar vários comandos de uma só vez,,
Pra ficar tipo o campo de consulta SQL do phpmyadmin,,
A solução que procuro é apenas inserir o CREATE TABLE e o INSERT INTO de uma só vez num campo textarea

Compartilhar este post


Link para o post
Compartilhar em outros sites

O amigo Paulo Freitas me ajudou pelo FaceBook 
<?php
$arquivo = $_FILES['arquivoTXT']; 
$banco = $arquivo['tmp_name'] ;


$db = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', '');

try {
    $db->beginTransaction(); // inicia transação
    $db->exec(file_get_contents($banco)); // executa comandos SQL do arquivo de backup
    $db->commit(); // salva alterações no banco
} catch (Exception $e) {
    $db->rollback(); // cancela alterações no banco
    print 'Erro!'; // exibe mensagem de erro
}

 

Era disso que eu estava precisando pra fazer a restauração do BD

 

Resolvido...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.