Backup do DB do sistema com php

Sei que o assunto já foi debatido em alguns tópicos porém não encontrei o que estou procurando, na verdade eu encontrei mais não foi aqui, estou aqui para buscar a ajuda dos companheiros na melhoria de um código que já esta em pleno funcionamento porém falta apenas alguns detalhes que conto com a ajuda de vocês para resolver.

[code]//auto_backup.php

// configuração do seu banco
$host = [sc_glo_servidor]; //
$user = [sc_glo_usuario];
$pass = [sc_glo_senha];
$db = [sc_glo_banco];

$print_result = true; //true para imprimir aba, false para não imprimir
$save_backup = true; //true para salvar, false para não salvar

$backup_file_name = $db; //Nome do arquivo, se $save_backup estiver ativado
$backup_file_format = “sql”; // formato da extensão (automatic_backup_140409.sql)
// fim configuração do banco

//$con = mysql_connect($host,$user,$pass);
//mysql_select_db($db);

//Lista as tabelas de seu banco
$tables = mysql_list_tables($db);
$backup = '-- Yunie Auto Backup System - Adaptado por Alan Maia - alanmaia@amazoninfo.com.br
– Atualizado por Elielder Oliveira ( TagaNet Info )- taganet.info@gmail.com
– Crédito: Alan Maia / Cleiton /


– Servidor: ‘.$host.’
– Banco de Dados: ‘.$db.’
– Data: ‘.date(“d/m/y”, time()).’


';

$backup .= ‘’;
//Rotina para criar arquivo com as instruções SQL
while ($tables_result = mysql_fetch_assoc($tables))
{
$tablename = $tables_result[‘Tables_in_’.$db.’’];
$backup .= '-- Estrutura da tabela '.$tablename.'


‘;
$backup .= ‘DROP TABLE IF EXISTS '.$tablename.';
CREATE TABLE IF NOT EXISTS '.$tablename.'
(’;
$fieldname = ‘’;
$fields_array = array();
$table_fields = mysql_query("SHOW COLUMNS FROM ".$tablename."“);
$primary_key = ‘’;
while ($fields_result = mysql_fetch_assoc($table_fields))
{
if (!empty($fieldname))
{
$backup .= ',
‘;
}
$fieldname = $fields_result[‘Field’];
$fields_array[] = $fieldname;
$type = $fields_result[‘Type’];
$primary = ‘’;
$increment = ‘’;
if ($fields_result[‘Extra’] == ‘auto_increment’)
{
$increment = ’ AUTO_INCREMENT’;
}
$null = ‘NULL’;
if ($fields_result[‘Null’] == ‘NO’)
{
$null = ‘NOT NULL’;
}
if ($fields_result[‘Key’] == ‘PRI’)
{
$primary_key = $fieldname;
}
$default = $fields_result[‘Default’];
if ($default && empty($increment))
{
$null = ‘’; // correção: para não imprimir NULL quando houver default
$default = “DEFAULT '”.$default.”’"; //correção: imprimir os dados de default dentro de aspas simples
}
else
{
$default = ‘’;
}
$backup .= ’'.$fieldname.' ‘.$type.’ ‘.$null.’’.$increment.’’.$default.’’;
}
if (!empty($primary_key))
{
$backup .= ‘,
PRIMARY KEY ('.$primary_key.')’; // correção: imprime o nome da chave primaria, pois estava como id
}
$backup .= ’
);’;
$fields_list = ‘(’;
$field_num = 1;
foreach(array_keys($fields_array) as $keys)
{
$fields_list .= ‘'.$fields_array[$keys].'’;
if ($field_num != sizeof($fields_array))
{
$fields_list .= ‘, ‘;
}
$field_num++;
}
$fields_list .= ‘)’;
$rows_fields = mysql_query(‘SELECT * FROM '.$tablename.'‘);
echo mysql_error();
$inserts = mysql_num_rows($rows_fields);
if ($inserts > 0)
{
$backup .= ’
INSERT INTO '.$tablename.' ‘.$fields_list.’ VALUES
‘;
$insert_num = 0;
while ($rows_result = mysql_fetch_assoc($rows_fields))
{
$insert_num++;
$field_num = 1;
$backup .= ‘(’;
foreach(array_keys($rows_result) as $keys)
{
$value = $rows_result[$keys];
$value = str_replace("’","’’",$value);
if (!is_numeric($value))
{
$backup .= "’".$value."’";
}
else
{
$backup .= $value;
}
if ($field_num != sizeof($rows_result))
{
$backup .= ‘,’;
}
$field_num++;
}
$backup .= ‘)’;
if ($insert_num == $inserts)
{
$backup .= ‘;’;
}
else
{
$backup .= ',
';
}
}
}
$backup .= ’
';
}

//Se no config estiver true visualiza num text area as instruções SQL
if ($print_result == true)
{
//Aqui vc pode imprimir num text area as instruções SQL pra mim não é necessário
//por isso está comentado para visualizar é só descomentar
//echo ‘’.$backup.’’;
}
//Se noconfig estiver true salva em arquivo .sql as instruções SQL
if ($save_backup == true)
{
//Aqui vc define o diretório onde o arquivo deve ser salvo
//Pode ser escrito como c:/pasta/bkp/
//Pode ser qualquer unidade inclusive na rede basta a pasta ter permissão
//Não esqueça de terminar o diretoírio com a barra /
$dir = ‘…/lib/tmp/’;
$file = fopen($dir.$backup_file_name.’
’.date(“d-m-Y-H-i-s”, time()).’.’.$backup_file_format.’’, “w+”);
fwrite($file, $backup);
fclose($file);
}[/code]

Bem o código acima esta perfeito, faz o backup corretamente e salva na pasta tmp do meu sistema, porém falta a implementação para que ele crie as Primary Keys compostas de mais de um campo como acontece nas tabelas de usuarios_x_grupos, grupos_x_aplicacoes.
Existe um comando que pode ser executado assim mysql_query("SHOW INDEX FROM `".$tablename."`"); porém não consegui chegar a uma conclusão onde posso implementar esse comando para que as Primary Keys compostas seja criadas corretamente.

Fico no aguardo da ajuda para chegarmos a uma solução juntos, este script esta muito bom.