Ir para conteúdo

POWERED BY:

Arquivado

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

Fabyo

Backup do banco mysql

Recommended Posts

Não funcionou! Simplesmente não aparece nada ao descompactar o arquivo. Alguém faz idéia? :(/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

CARACAS Fabyo. Debuguei seu script e o erro era na variável que você digitou errado. :(/>

 

Corrija lá, pelo amor de Deus. ;)/>

 

Onde está:

$backup = "";

$tabelas = mysql_list_tables('banco');

O certo é:

$backup = "";

$tabelas = mysql_list_tables($banco);

Valeu pelo script, parabéns. Realmente esse Fabyo é Soda em PHP http://forum.imasters.com.br/public/style_emoticons/default/clap.gif/>

 

 

 

Eu fiz um sistema de backup novo ,bem melhor

 

<?set_time_limit(0);$con = @mysql_connect("localhost", "usuario", "senha");mysql_select_db("banco");$tabelas = mysql_query("SHOW TABLE STATUS");while($l = mysql_fetch_assoc($tabelas)) {	$tabela[$l["Name"]] = $l["Auto_increment"];}$backup  = "";$tabelas = mysql_list_tables($banco);while($tab = mysql_fetch_row($tabelas)) {   $backup .= "--\n-- Estrutura da Tabela $tab[0]\n--\n\nDROP TABLE IF EXISTS $tab[0];\n";   $res = mysql_query("SHOW CREATE TABLE $tab[0]");   while($all = mysql_fetch_assoc($res)){	   	   $str = $all['Create Table'];	   $str = str_replace("`", "", $str);	   $str = str_replace("  ", "\t", $str);	   if(!empty($tabela[$tab[0]])) {			$backup .= $str." AUTO_INCREMENT=".$tabela[$tab[0]].";\n\n";		} else {			$backup .= $str.";\n\n";		}	}		$data = mysql_query("SELECT * FROM $tab[0]");if(mysql_num_rows($data)) {	$backup .= "--\n-- Extraindo dados da tabela $tab[0]\n--\n\n";}	while($dt = mysql_fetch_row($data)){	   $backup .= "INSERT INTO $tab[0] VALUES('$dt[0]'";	   for($i=1; $i<sizeof($dt); $i++) {		   $backup .= ", '$dt[$i]'";	   }	   $backup .= ");\n";}	$backup .= "\n----------------------------------------------------------\n\n";}echo "<pre>$backup</pre>";?>
nao sei se tem gente que precisa mas da pra fazer um sitema bem completo onde a pessoa escolheria o banco num combo e teria mais informações sobre o banco como tamanho, tipo etc...

 

ah corrigi as funções do primeiro topico, o problema era nas antigas tags de PHP que tinha dado pau dai auterou o script por isso dava erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só, como a maioria não tem conhecimentos avançados nem dominam excepcionalmente a tecnologia, acho que o ideal é deixar explicado tin-tin por tin-tin. (como no outro tópico que perguntaram o que era SHOW, em "show tables"). http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif/>

 

Acho que seria interesante incluir no script o seguinte:

 

$localhost = "seu.host";

$usuario = "seu.nome.de.usuario";

$senha = "sua.senha";

$banco = "seu.banco";

 

$con = @mysql_connect($localhost, $usuario, $senha);

mysql_select_db($banco);

Basta substituir os valores para as variáveis acima e rodar o script que ele faz o resto automaticamente. O que acha? B)/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicionei a função de ZIP no script.

 

<?set_time_limit(0);$con = @mysql_connect("localhost", "usuario", "senha");mysql_select_db("banco");$tabelas = mysql_query("SHOW TABLE STATUS");while($l = mysql_fetch_assoc($tabelas)) {	$tabela[$l["Name"]] = $l["Auto_increment"];}$backup  = "";$tabelas = mysql_list_tables($banco);while($tab = mysql_fetch_row($tabelas)) {   $backup .= "--\n-- Estrutura da Tabela $tab[0]\n--\n\nDROP TABLE IF EXISTS $tab[0];\n";   $res = mysql_query("SHOW CREATE TABLE $tab[0]");   while($all = mysql_fetch_assoc($res)){	  	   $str = $all['Create Table'];	   $str = str_replace("`", "", $str);	   $str = str_replace("  ", "\t", $str);	   if(!empty($tabela[$tab[0]])) {			$backup .= $str." AUTO_INCREMENT=".$tabela[$tab[0]].";\n\n";		} else {			$backup .= $str.";\n\n";		}	}		$data = mysql_query("SELECT * FROM $tab[0]");if(mysql_num_rows($data)) {	$backup .= "--\n-- Extraindo dados da tabela $tab[0]\n--\n\n";}	while($dt = mysql_fetch_row($data)){	   $backup .= "INSERT INTO $tab[0] VALUES('$dt[0]'";	   for($i=1; $i<sizeof($dt); $i++) {		   $backup .= ", '$dt[$i]'";	   }	   $backup .= ");\n";}	$backup .= "\n----------------------------------------------------------\n\n";}// Acrescentei o seguinte:$fileName = date('d-m-Y') . '.txt';$fileHandle = fopen($fileName, 'w');fwrite($fileHandle, $backup);fclose($fileHandle);require("zipfile.php");$zipfile = new zipfile(date("d-m-Y").".zip");$zipfile->addFileAndRead($fileName);echo $zipfile->file();?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Refiz todo o sistema de backup, deixei mais dinamico, debugado e facil de gerar o backup, e ele mostra o backup na tela ou gera um arquivo.sql

 

init.php:

 

<?php
/*nao pensem que eu estou desativando as mensagens de erros
porque o sistema nao tem erros, mas para fazer um sistema de debuger é preciso desligar as mensagens de erro
para poder mostrar mensagens mais personalisadas */
error_reporting(0);
@ini_set('display_errors', '0');
@ini_set('register_globals', '0');
set_time_limit(0);

if (!extension_loaded('mysql')) {
echo( "Nao esta habilitada a dll Mysql" );
exit;	
}

if(!file_exists("config.php")) {
echo "Nao foi localizado o arquivo <b>config.php</b>";
exit;
} else {
require "config.php";
}

if (!defined("SERVIDOR") or !defined("USUARIO") or !defined("SENHA")){
echo "O arquivo <b>config.php</b> nao esta correto<br />";
echo "Crie o <b>config.php</b> dessa maneira:<br />";
echo highlight_string("<?php
define(\"SERVIDOR\", \"localhost\");
define(\"USUARIO\", \"coloque_seu_usuario\");
define(\"SENHA\", \"coloque_sua_senha\");
?>", 1);
exit;
}

?>

 

index.php:

 

<?php
require "init.php";
if(mysql_connect(SERVIDOR, USUARIO, SENHA)) {
$re = mysql_query("SHOW DATABASES");
} else {
echo "Nao foi possivel conectar no banco de dados<br />Verifique os dados do config.php";
exit;
}

if (getenv("REQUEST_METHOD") == "POST") {
if(isset($_POST["tabelas"])) {	
	$tabela = $_POST["tabelas"];
	$sql  = "-- Sistema de backup feito por Fabyo Guimaraes 25/06/2006\r\n";		
	$sql .= "-- Servidor: ". SERVIDOR ."\r\n";		
	$sql .= "-- Banco de dados: ". $_POST["db"] ."\r\n";		
	$sql .= "-- Data backup: ". date("d/m/Y H:i:s")."\r\n";		
	$sql .= "-- Versao MySQL: ". mysql_get_server_info()."\r\n";		
	$sql .= "-- Versao PHP: ". phpversion()."\r\n\r\n";	

	mysql_select_db($_POST["db"]);		
	$re  = mysql_query("SHOW TABLE STATUS");				
	while($l = mysql_fetch_assoc($re)){		
		$tbl_stat[$l["Name"]] = $l["Auto_increment"];		
	}
	for($i = 0; $i < count($tabela); $i++) {
		$re2 = mysql_query("SHOW CREATE TABLE $tabela[$i]");
		$sql .= "-- Estrutura da tabela $tabela[$i]\r\n\r\n";
		$l2  = mysql_fetch_array($re2);
		if($tbl_stat[$tabela[$i]] != "") {
			$sql .= str_replace("  ", "\t", str_replace("`", "", $l2[1])). " AUTO_INCREMENT=". $tbl_stat[$tabela[$i]] .";\r\n\r\n";					
		} else {
			$sql .= str_replace("  ", "\t", str_replace("`", "", $l2[1])).";\r\n\r\n";					
		}			
		$re3 = mysql_query("SHOW COLUMNS FROM $tabela[$i]");	
		$campos = "";	
		while ($row = mysql_fetch_array($re3)) {	
			$campos[] = $row[0];				
		}
		$re4 = mysql_query("SELECT * FROM $tabela[$i]");			
		if(mysql_num_rows($re4)) {									
			while($dt = mysql_fetch_row($re4)) {
				$valores = "";			
				for($j = 0; $j < sizeof($dt); $j++){
					$valores[] .= "'". $dt[$j] ."'";
				}
				$campo = implode(", ", $campos);	
				$valor = implode(", ", $valores);	
				$sql  .= "INSERT INTO $tabela[$i] ($campo) VALUES ($valor);\r\n";										
			}
		}
		$sql .= "\r\n";	
	}   	
	echo "<pre>$sql</pre>";
	if(isset($_POST["sql"])) {			
		$fp = fopen($_POST["db"].".sql", "w+");
		if(!fwrite($fp, $sql)) {
			echo "Erro na criação do arquivo, verifique a permissao de escrita";
			exit;
		}
		fclose($fp);
	}
	exit;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Backup</title>
<script>
function seleciona_tudo(retorno){
var frm = document.form1;
for(i = 0; i < frm.length; i++) {		
	if(frm.elements[i].type == "select-multiple") {
		for(var j = 0; j < frm.elements[i].options.length; j++) {		
			frm.elements[i].options[j].selected = retorno ? 'selected' : false;		
		}	   
	}
 }
}

function envia(val) {
document.form1.submit();
}
</script>
</head>
<form id="form1" name="form1" method="post" action="">
<label>Bancos</label><br /> 
<select name="db" id="db" onchange="envia(this.value)">
<?php

while($l = mysql_fetch_array($re)) {	
if(isset($_POST["db"])) {
	if($_POST["db"] == $l[0]) {
		echo "\t<option value=\"{$l[0]}\" selected=\"selected\">$l[0]</option>\r\n";
	} else {
		echo "\t<option value=\"{$l[0]}\">$l[0]</option>\r\n";
	}
} else {
	echo "\t<option value=\"{$l[0]}\">$l[0]</option>\r\n";
}	
} 
?>
</select><br />
<input type="checkbox" name="checkbox" value="1" onclick="return seleciona_tudo(this.checked);" /><label>Seleciona tudo</label>
<br />
<select name="tabelas[]" size="5" multiple>
<?php
if (getenv("REQUEST_METHOD") == "POST") {
$db = $_POST["db"];
$re = mysql_query("SHOW TABLES FROM $db");
while($l = mysql_fetch_array($re)) {
	echo "<option value=\"{$l[0]}\">{$l[0]}</option>\r\n";	
} 
}
?>
</select><br />
<input type="checkbox" name="sql" value="1" /><label>Criar arquivo</label><br />
<input type="submit" name="botao" value="Backup" style="cursor:pointer;"/>
</form>
</body>
</html>

 

config.php

<?php
define("SERVIDOR", "localhost");
define("USUARIO", "usuario");
define("SENHA", "senha");
?>

 

 

criei um arquivo init.php que faz as verificações basicas antes do sistema rodar, e um arquivo de configuração, dai para usar basta configurar o config.php e escolher o banco de dados na lista

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu remodelei o primeiro para para fazer o backup, com download directo do zip e delete automatico do backup.sql que é criado para ser zipado :D/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in f:\clientes\joiedevivre\www\bkp-bancodedados.php on line 22Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in f:\clientes\joiedevivre\www\bkp-bancodedados.php on line 35Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in f:\clientes\joiedevivre\www\bkp-bancodedados.php on line 39Apesar disto ele aparentemente fez tudo!O que este erro significa e o que eu posso "perder" ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usei o script e funcionou legal, só tive uma questão que não entendi o porque e gostaria que avaliassem e me explicassem porque. Usei o script em dois servidores, em um é criado um arquivo de texto no servidor com o backup das tabelas e todas as informações do BD, e é também enviado um arquivo .zip para download, mas no outro servidor este arquivo .zip, não vem como .zip e sim como .php, só que é um arquivo zipado, precisando para acessá-lo, renomeá-lo para .zip, será o que está acontecendo?, Obrigado a todos.OBS: O script usado nos dois servidores foram alterados somente a configuração da conexão com o banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo já resolvi. Grato!Nem lembro o que foi! :D/>se de pra da um help no sistema de login, to anciono pelo codigo, to usando um com cookie e estou com medo do sqlinjectabrçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal usei o scripit e rodou 100%Valeu, uma sugestão, qual tal criarmos uma função para o cliente selecionar uma pasta local no PC para salvar os Backups ?Fica ai a sugestão.Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O script parou quando encontrou <select> E no arquivo txt aparece um combo. Alguém sabe porque?:|

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.