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

Backup do banco mysql e ainda zipa o arquivo

 

backup.php

corridigo o problema era nas tags PHP que tinha dado pau auterando o script

<?php

mysql_connect("localhost", "usuario", "senha");
mysql_select_db("banco");

set_time_limit(0); 

function sqlAddslashes($str = '', $is_like = FALSE) 
{ 
if ($is_like) 
{ 
	$str = str_replace('\\', '\\\\\\\\', $str); 
	}else{ 
	$str = str_replace('\\', '\\\\', $str); 
	} 
	$str = str_replace('\'', '\\\'', $str); 
	return $str; 
} 

function dumptb($table) { 
$nline = "\n"; 
$dp = "CREATE TABLE $table ($nline"; 
$firstfield = 1; 
$fields_array = mysql_query("SHOW FIELDS FROM $table"); 

while ($field = mysql_fetch_array($fields_array)) 
{ 
	if (!$firstfield) 
	{ 
		$dp .= ",\n"; 
	}else{ 
		$firstfield = 0; 
	} 
	$dp .= "\t".$field["Field"]." ". $field["Type"]; 
	if (isset($field['Default']) && $field['Default'] != '') 
	{ 
				$dp .= ' default \'' . sqlAddslashes($field['Default']) . '\''; 
	} 
	if ($field['Null'] != 'YES') 
	{ 
		$dp .= ' NOT NULL '; 
	} 
	if (!empty($field["Extra"])) 
	{ 
		$dp .= $field["Extra"]; 
	} 
} 
mysql_free_result($fields_array); 

$keysindex_array = mysql_query("SHOW KEYS FROM $table"); 

while ($key = mysql_fetch_array($keysindex_array)) 
{ 
	$kname = $key['Key_name']; 
	if ($kname != "PRIMARY" and $key['Non_unique'] == 0) 
	{ 
		$kname = "UNIQUE|$kname"; 
	} 

	$index[$kname][] = $key['Column_name']; 
} 
mysql_free_result($keysindex_array); 

while(list($kname, $columns) = @each($index)) 
{ 
	$dp .= ",\n"; 
	$colnames = implode($columns,","); 
	if($kname == 'PRIMARY') 
	{ 
		$dp .= "\tPRIMARY KEY ($colnames)"; 
	}else{ 
		if (substr($kname,0,6) == 'UNIQUE') 
		{ 
			$kname = substr($kname,7); 
		} 
		$dp .= "   KEY $kname ($colnames)"; 
	} 
} 
$dp .= "\n);\n\n"; 
$rows = mysql_query("SELECT * FROM $table"); 
$numfields=mysql_num_fields($rows); 

while ($row = mysql_fetch_array($rows)) 
{ 
	$dp .= "INSERT INTO $table VALUES("; 
	$fieldcounter=-1; 
	$firstfield=1; 
	while (++$fieldcounter<$numfields) 
	{ 
		if(!$firstfield) 
		{ 
			$dp .=' , '; 
		}else{ 
			$firstfield=0; 
		} 
		if (!isset($row[$fieldcounter])) 
		{ 
			$dp .= 'NULL'; 
		}else{ 
			$dp .= "'".mysql_escape_string($row[$fieldcounter])."'"; 
		} 
	} 
	$dp .= ");\n"; 
} 
mysql_free_result($rows); 
return $dp; 
} 


$file_name = date("d-m-Y").".txt"; 
$filehandle = fopen($file_name,'w'); 
$result = mysql_query("SHOW tables"); 
while ($row = mysql_fetch_array($result)) 
{ 
	fwrite($filehandle,dumptb($row[0])."\n\n\n"); 
} 
fclose($filehandle); 


require("zip_lib.php");

$zipfile = new zipfile(date("d-m-Y").".zip");

$zipfile->addFileAndRead($file_name);

echo $zipfile->file();	

?>

 

zip_lib.php:

 

<?php

class zipfile{

 var $datasec = array();
 var $ctrl_dir = array();
 var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";


 function zipfile ($output_filename = 'archive.zip'){

	 header('Content-Type: application/x-zip');
	 header('Content-Disposition: inline; filename="' . $output_filename . '"');
	 header('Expires: 0');
	 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
	 header('Pragma: public');

	 }

 function read_File ($file){

	 if (is_file($file)){

		 $fp = fopen ($file, 'rb');
		 $content = fread ($fp, filesize($file));
		 fclose ($fp);

		 return $content;

		 }

	 }

 function addFileAndRead ($file){

	 if (is_file($file))
		 $this -> addFile($this -> read_File($file), $file);

	 }

 function unix2DosTime($unixtime = 0){

	 $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);

	 if ($timearray['year'] < 1980){

		 $timearray['year'] = 1980;
		 $timearray['mon'] = 1;
		 $timearray['mday'] = 1;
		 $timearray['hours'] = 0;
		 $timearray['minutes'] = 0;
		 $timearray['seconds'] = 0;

		 }

	 return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
	 ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);

	 }

 function addFile($data, $name, $time = 0){

	 $name = str_replace('\\', '/', $name);

	 $dtime = dechex($this -> unix2DosTime($time));
	 $hexdtime = '\x' . $dtime[6] . $dtime[7]
	 . '\x' . $dtime[4] . $dtime[5]
	 . '\x' . $dtime[2] . $dtime[3]
	 . '\x' . $dtime[0] . $dtime[1];

	 eval('$hexdtime = "' . $hexdtime . '";');

	 $fr = "\x50\x4b\x03\x04";
	 $fr .= "\x14\x00"; // ver needed to extract
	 $fr .= "\x00\x00"; // gen purpose bit flag
	 $fr .= "\x08\x00"; // compression method
	 $fr .= $hexdtime; // last mod time and date


	 $unc_len = strlen($data);
	 $crc = crc32($data);
	 $zdata = gzcompress($data);
	 $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
	 $c_len = strlen($zdata);
	 $fr .= pack('V', $crc); // crc32
	 $fr .= pack('V', $c_len); // compressed filesize
	 $fr .= pack('V', $unc_len); // uncompressed filesize
	 $fr .= pack('v', strlen($name)); // length of filename
	 $fr .= pack('v', 0); // extra field length
	 $fr .= $name;

	 $fr .= $zdata;

	 $fr .= pack('V', $crc); // crc32
	 $fr .= pack('V', $c_len); // compressed filesize
	 $fr .= pack('V', $unc_len); // uncompressed filesize


	 $this -> datasec[] = $fr;
	 $new_offset = strlen(implode('', $this -> datasec));

	 $cdrec = "\x50\x4b\x01\x02";
	 $cdrec .= "\x00\x00"; // version made by
	 $cdrec .= "\x14\x00"; // version needed to extract
	 $cdrec .= "\x00\x00"; // gen purpose bit flag
	 $cdrec .= "\x08\x00"; // compression method
	 $cdrec .= $hexdtime; // last mod time & date
	 $cdrec .= pack('V', $crc); // crc32
	 $cdrec .= pack('V', $c_len); // compressed filesize
	 $cdrec .= pack('V', $unc_len); // uncompressed filesize
	 $cdrec .= pack('v', strlen($name)); // length of filename
	 $cdrec .= pack('v', 0); // extra field length
	 $cdrec .= pack('v', 0); // file comment length
	 $cdrec .= pack('v', 0); // disk number start
	 $cdrec .= pack('v', 0); // internal file attributes
	 $cdrec .= pack('V', 32); // external file attributes - 'archive' bit set


	 $cdrec .= pack('V', $this -> old_offset); // relative offset of local header
	 $this -> old_offset = $new_offset;

	 $cdrec .= $name;

	 $this -> ctrl_dir[] = $cdrec;

	 }

 function file(){

	 $data = implode(NULL, $this -> datasec);
	 $ctrldir = implode(NULL, $this -> ctrl_dir);

	 return $data .
	 $ctrldir .
	 $this -> eof_ctrl_dir .
	 pack('v', sizeof($this -> ctrl_dir)) . pack('v', sizeof($this -> ctrl_dir)) . pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00"; // .zip file comment length
	 }

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu devo chamar alguma função?

 

Tipo:

 

<!--php1--><div class='phptop'>PHP</div><div class='phpmain'><!--ephp1--><link href = "style_images/css_php.css" rel = "stylesheet" type = "text/css">

[*]<?

[*]...

[*]dumptb<span style=' color: green;'>(nome_da_minha_tabela)</span>;

[*]...

[*]?>

<!--php2--></div><!--ephp2-->

 

Ou é automático e ele faz o Backup de todas as tabelas do banco?

 

Eu só preciso executar o script no meu servidor e na hora ele já faz o backup?

 

Gostaria muito de entender e aprender a usar esse script.

 

Agradeço, caso alguém possa me ajudar.

 

Valeu! :unsure:/>/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15Parse error: parse error, unexpected T_STRING in c:\appserv\www\backup\backup.php on line 15deu tudo isso de erro no backup.php ¬¬porque sera? o codigo da igualzinho, so alterei essa parte:mysql_connect("localhost","root","");mysql_select_db("aff");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15

 

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15

 

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15

 

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15

 

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15

 

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15

 

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in c:\appserv\www\backup\backup.php on line 15

 

Parse error: parse error, unexpected T_STRING in c:\appserv\www\backup\backup.php on line 15

 

 

deu tudo isso de erro no backup.php ¬¬

porque sera? o codigo da igualzinho, so alterei essa parte:

mysql_connect("localhost","root","");

mysql_select_db("aff");

<{POST_SNAPBACK}>

você possúi um banco de dados nomeado como aff?

porque comigo o código funcionou sem nenhum problema!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

todo bugado o codigo eu depurei ele mais nao da erro ele gera um arquivo .txt com a minha base de dados mais nao zipa nem a pau

 

<?PHP

 

mysql_connect("localhost","root","");

mysql_select_db("renatoalves");

 

if (function_exists("set_time_limit") == 1 and get_cfg_var("safe_mode") == 0){

@set_time_limit(0);

}

 

function sqlAddslashes($str = '', $is_like = FALSE){

if ($is_like){

$str = str_replace('\a34f59274d50f313ec06e96e2620e117','\\\\\\\a34f59274d50f313ec06e96e2620e117', $str);

}

else{

$str = str_replace('\a34f59274d50f313ec06e96e2620e117','\\\a34f59274d50f313ec06e96e2620e117', $str);

}

$str = str_replace('a34f59274d50f313ec06e96e2620e117', '\\a34f59274d50f313ec06e96e2620e117', $str);

return $str;

}

 

function dumptb($table){

$nline = "\n";

$dp = "CREATE TABLE $table ($nline";

$firstfield = 1;

$fields_array = mysql_query("SHOW FIELDS FROM $table");

 

while ($field = mysql_fetch_array($fields_array)){

if (!$firstfield){

$dp .= ",\n";

}

else{

$firstfield = 0;

}

$dp .= "\t".$field["Field"]." ". $field["Type"];

if (isset($field['Default']) && $field['Default'] != ''){

$dp .= ' default a34f59274d50f313ec06e96e2620e117' . sqlAddslashes($field['Default']) . 'a34f59274d50f313ec06e96e2620e117';

}

if ($field['Null'] != 'YES'){

$dp .= ' NOT NULL ';

}

if (!empty($field["Extra"])){

$dp .= $field["Extra"];

}

}

mysql_free_result($fields_array);

 

$keysindex_array = mysql_query("SHOW KEYS FROM $table");

 

while ($key = mysql_fetch_array($keysindex_array)){

$kname = $key['Key_name'];

if ($kname != "PRIMARY" and $key['Non_unique'] == 0){

$kname = "UNIQUE|$kname";

}

 

$index[$kname][] = $key['Column_name'];

}

mysql_free_result($keysindex_array);

 

while(list($kname, $columns) = @each($index)){

$dp .= ",\n";

$colnames = implode($columns,",");

if($kname == 'PRIMARY'){

$dp .= "\tPRIMARY KEY ($colnames)";

}

else{

if (substr($kname,0,6) == 'UNIQUE'){

$kname = substr($kname,7);

}

$dp .= " KEY $kname ($colnames)";

}

}

$dp .= "\n);\n\n";

$rows = mysql_query("SELECT * FROM $table");

$numfields=mysql_num_fields($rows);

 

while ($row = mysql_fetch_array($rows)){

$dp .= "INSERT INTO $table VALUES(";

$fieldcounter=-1;

$firstfield=1;

while (++$fieldcounter<$numfields){

if(!$firstfield){

$dp .=' , ';

}

else{

$firstfield=0;

}

if (!isset($row[$fieldcounter])){

$dp .= 'NULL';

}

else{

$dp .= "'".mysql_escape_string($row[$fieldcounter])."'";

}

}

$dp .= ");\n";

}

mysql_free_result($rows);

return $dp;

}

 

$table = mysql_query("SHOW tables");

unset($temp_buffer);

while ($row = mysql_fetch_array($table)){

if (!empty($row[0])){

$temp_buffer = dumptb($row[0])."\n\n\n";

}

}

 

$file_name = date("d-m-Y").".txt"; // path chmod 777

 

$filehandle = fopen($file_name,'w');

$result = mysql_query("SHOW tables");

while ($row = mysql_fetch_array($result)){

fwrite($filehandle,dumptb($row[0])."\n\n\n");

}

fclose($filehandle);

?>

 

estou depurando a parada pra zipar mais ta f***

esse codigo ele gera o txt com a base de dados fornecida




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

este segundo script não funcionou aqui, o primeiro eu não testei....

 

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\sites\limainformatica\admin\robot\backup.php on line 13

 

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

sera que tinha como comentar o script?gostaria de entender o que esta acontecendo e algo como$tabelas = mysql_query("SHOW TABLE STATUS");não sei oque esta fazendo o que é esse show......tb não entendi muito bem o que ele faz?primeiro da um drop e depois cria e insere? ou isso é só para mostrar a estrutura e ele não executa esses comandos???........e para criar o zip?(só testei o segundo)

Compartilhar este post


Link para o post
Compartilhar em outros sites

SHOW TABLE STATUS, é um comando MYSQL para mostrar o "status" das tabelas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
Como adicionar o script de ZIP neste novo código?Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No meu pc apache2 php5 e mysql-server-5 apareceu isto!!!Warning: Cannot modify header information - headers already sent by (output started at /var/www/testing/backup/zip_lib.php:142) in /var/www/testing/backup/zip_lib.php on line 12Warning: Cannot modify header information - headers already sent by (output started at /var/www/testing/backup/zip_lib.php:142) in /var/www/testing/backup/zip_lib.php on line 13Warning: Cannot modify header information - headers already sent by (output started at /var/www/testing/backup/zip_lib.php:142) in /var/www/testing/backup/zip_lib.php on line 14Warning: Cannot modify header information - headers already sent by (output started at /var/www/testing/backup/zip_lib.php:142) in /var/www/testing/backup/zip_lib.php on line 15Warning: Cannot modify header information - headers already sent by (output started at /var/www/testing/backup/zip_lib.php:142) in /var/www/testing/backup/zip_lib.php on line 16PKMais o importante e que fez o backup, muito bom parabens!!!

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.