Over a million developers have joined DZone.

Mysql All Databases Backup [php]

·
source from: http://www.infoneural.com/2008/06/04/script-para-fazer-backup-de-bases-do-mysql-facilmente/


ConectaBase();
}

// Conexao com banco
function ConectaBase()
{
$this->link = @mysql_connect( $this->servidor, $this->usuario, $this->senha);
if (!$this->link) {
die(”Error na conexao: “.mysql_error().” - “.mysql_errno());
} elseif (!mysql_select_db($this->banco, $this->link)) {
die(”Error na conexao: “.mysql_error().” - “.mysql_errno());
// mysql_errno(): numero do erro
//mysql_error(): descrição do erro
}
}

// Execução da query
function sql($query)
{
$this->query = $query;
if ($result = mysql_query($this->query,$this->link)) {
return $result;
} else {
return 0;
}
}
// dados da tabela
function tabelas()
{
if ($result = mysql_list_tables($this->banco)) {
return $result;
} else {
return 0;
}
}
// função de mandar email
function Sendmail($arquivo, $para, $assunto)
{

$body = “”;
$attach_name = “”;

if ($arquivo != “”) {

$file = fopen($arquivo, “r”);
$contents = fread($file, (1024*1024));
$encoded_attach = chunk_split(base64_encode($contents));
fclose($file);
$attach_name = $arquivo;

$anexo .= “\n\n–Message-Boundary\n”;
$anexo .= “Content-type: $attach_type; name=\”$attach_name\”\n”;
$anexo .= “Content-Transfer-Encoding: BASE64\n”;
$anexo .= “Content-disposition: attachment; filename=\”$attach_name\”\n\n”;
$anexo .= “$encoded_attach\n”;
$anexo .= “–Message-Boundary–\n”;

}

$cabecalho = “From: Nome  \r\n”;
$cabecalho .= “Content-Type: text/html;”;
$cabecalho .= “MIME-version: 1.0\n”;
$cabecalho .= “Content-type: multipart/html; “;
$cabecalho .= “boundary=\”Message-Boundary\”\n”;
$cabecalho .= “Content-transfer-encoding: 7BIT\n”;
$cabecalho .= “X-attachments: $attach_name”;

$mensagem = “–Message-Boundary\n”;
$mensagem .= “Content-type: text/html; charset=US-ASCII\n”;
$mensagem .= “Content-transfer-encoding: 7BIT\n”;
$mensagem .= “Content-description: Mail message body\n\n”;

$mensagem .= $body . $anexo;

mail($para, $assunto, $mensagem, $cabecalho);
}
}

// pasta temporaria pra geração do gzip
$path = “backup”;
// nome do banco
$dbname = “nome_do_banco”;
// nome do arquivo sql
$nome_arquivo_sql = $path.”_”.$nome_arquivo.”.sql”;
// nome do arquivo sql compactado
$nome_arquivo_gz = $dbname.”_”.date(”d-m-Y”).”.sql.gz”;

// cria e abre o arquivo como leitura
$back = fopen($nome_arquivo_sql,”w”);

// recebe os dados da tabela com o camando da classe mysql_list_tables()
$res = $objConexao->tabelas();

// aqui cria um cabeçalho para o arquivo sql
// como exemplo nome, criado em, autor, dados do banco vc pode escrever aqui
fwrite($back,”#\n# Arquivo de Geração de Backup\n”);
fwrite($back,”# Autor: Seu Nome - email opcional \n”);
fwrite($back,”# Banco: MySql\n#\n\n\n”);

// aqui começamos a lógica
// enquanto receber valor do $res ele faz a rotina
while ($row = mysql_fetch_row($res)) {
// listamos todas as tabelas
// e pegamos sempre o [0] q sempre vem o nome da tabela
$table = $row[0];
// aqui pega os dados da criação tabela q vem do item acima, sempre na ordem
$res2 = mysql_query(”SHOW CREATE TABLE $table”);
// entao aqui entramos na proxima rotina,
// onde pegamos os valores da tabela e montamos os inserts
while ( $lin = mysql_fetch_row($res2)){

// aqui escrevemos um cabeçalho pra cada tabela
// identificando a tabela e separando os inserts
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”);

// então pegamos os dados da tabela pra monta os insert’s
$res3 = $objConexao->sql(”SELECT * FROM $table”);
while($r = mysql_fetch_row($res3)){
// colocamos o prefixo que insere os valores na tabela
$sql=”INSERT INTO $table VALUES (”;

//cada linha de registro separamos com os vamores com aspas simples ” e virgula ,
for($j=0; $jSendmail($nome_arquivo_gz, $email_destino, $assunto);

// apaga os arquivos temporarios do servidor
unlink(”$nome_arquivo_gz”);
unlink(”$nome_arquivo_sql”);

?>
Topics:

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}