Artigos & Ideias

Backup Base Dados MySQL Com PHP

Escrito por:

Uma das tarefas mais importantes de qualquer programador precisa de fazer com frequência é o Backup à sua base de dados MySQL. Em muitos casos, a Base de Dados é o que dirige a maior parte do site.
Embora a maioria dos web hostings fazem backups diários da Base de Dados dos clientes, porém, em alguns casos, depender deles para fazer backups e disponibilizar-nos, sem qualquer custo é no mínimo arriscado. É por isso que criei uma função de backup de dados que possa utilizar sempre que quiser.

backup_bd('localhost','utilizador','password','blog');

/* Fazer Backup da BD ou só de uma Tabela */
function backup_bd($host,$utilizador,$password,$nome,$tabelas = '*')
{

	$link = mysql_connect($host,$utilizador,$password);
	mysql_select_db($nome,$link);

	//obter todas as tabelas
	if($tabelas == '*')
	{
		$tabelas = array();
		$resultado = mysql_query('SHOW TABLES');
		while($coluna = mysql_fetch_row($resultado))
		{
			$tabelas[] = $coluna[0];
		}
	}
	else
	{
		$tabelas = is_array($tabelas) ? $tabelas: explode(',',$tabelas);
	}

	foreach($tabelas as $tabelas)
	{
		$resultado = mysql_query('SELECT * FROM '.$tabelas);
		$num_campos = mysql_num_fields($resultado);

		$return.= 'DROP TABLE '.$tabelas.';';
		$coluna2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$tabelas));
		$return.= "\n\n".$coluna2[1].";\n\n";

		for ($i = 0; $i < $num_campos; $i++)
		{
			while($coluna = mysql_fetch_row($resultado))
			{
				$return.= 'INSERT INTO '.$tabelas.' VALUES(';
				for($j=0; $j<$num_campos; $j++)
				{
					$coluna[$j] = addslashes($coluna[$j]);
					$coluna[$j] = ereg_replace("\n","\\n",$coluna[$j]);
					if (isset($coluna[$j])) { $return.= '"'.$coluna[$j].'"' ; } else { $return.= '""'; }
					if ($j<($num_campos-1)) { $return.= ','; }
				}
				$return.= ");\n";
			}
		}
		$return.="\n\n\n";
	}

	//guarda ficheiro
	$ficheiro = fopen('bd-backup-'.time().'-'.(md5(implode(',',$tabelas))).'.sql','w+');
	fwrite($ficheiro,$return);
	fclose($ficheiro);
}

Claro que vais precisar de fornecer as credenciais de login da Base de Dados, bem como o conjunto de tabelas que queres fazer o backup. Se colocares “*” ou nenhuma tabela, será feito um full backup da Base de Dados. O script faz o resto!

Mais vale não arriscar quando o site é de estrema importância. Faz backups frequentes ou podes ter que pagar o preço mais tarde!

8


Sobre o Autor

Carlos Gonçalves é um Freelancer com bastante experiência em linguagens de programação e webdesign. Vocacionado para as novas tecnologias, aposta na qualidade dos serviços, atendimento rápido e sempre disponível para melhor satisfazer os seus clientes. Autor do site cgoncalves.com

Comentários

  1. softclean  16 Outubro 2009

    Como sugestão, a função poderia também fornecer um ficheiro comprimido, em vez de fornecer os dados em bruto, visto que em alguns casos existem grandes volumes de informação na base de dados.

    Sempre eram uns kbs a menos no espaço ocupado :D

    (responder)
  2. Scorch  16 Outubro 2009

    Grande post. Bom tutorial. :D

    (responder)
  3. ddik  4 Junho 2010

    Sim muito bom este. Apoio sugestão do softclean…

    (responder)
  4. Franca  20 Abril 2011

    Quanto atualizar seu script, documenta mais, facilitar e melhora o entendimento dos poucos entendido dessa linguagem e que tem vontade de aprender =)

    (responder)
  5. BK  18 Fevereiro 2012

    Otimo Script bem formulado!!!
    so um detalhe na linha 41
    trocar
    $coluna[$j] = addslashes($row[$j]);
    por
    $coluna[$j] = addslashes($coluna[$j]);

    valeu otimo blog

    (responder)
  6. Lucas Fernando  23 Abril 2012

    Ola, excelente SCRIPT caiu como uma luva no que eu precisava.
    Mais só faltou uma coisa pra mim.
    No meu caso em vez de salvar em um diretório especifico, preciso que de opção para o usuario tipo “salvar como”

    Alguem pode me ajudar com isso ?

    (responder)

Comentar

Nota: A moderação de comentários está activada e pode atrasar o teu comentário. Não há necessidade de reenviares o teu comentário.

More in MySQL, PHP, SGBD (12 of 26 articles)

# #