Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/04/2011, 12:05
Avatar de Deathmetalrules
Deathmetalrules
 
Fecha de Ingreso: diciembre-2010
Ubicación: Mas - aya
Mensajes: 65
Antigüedad: 13 años, 5 meses
Puntos: 8
Pregunta Mejorando backup de mysql

hola nuevamente amigos de forosdelweb...

tengo el siguiente codigo
Código PHP:
<?php 
include("../conexion/conexion.php");
session_start();
if (isset(
$_SESSION['nombreusuario'])) 
    {
  
$conexion mysql_connect($servername,$dbusername,$dbpassword) or die(mysql_error());
  @
mysql_select_db($dbname,$conexion);
  
$fechaDeLaCopia "-".date("d l-F-Y");    
  
$ficheroDeLaCopia =$dbname.$fechaDeLaCopia.".sql";
  
$encabezamientoDeLaCopia "# Copia de la base de datos creada el: ".date("d-m-Y")."\n# BBDD: $dbname \r\n";
  
$manejadorDelFicheroDeLaCopia fopen($ficheroDeLaCopia,"a+b");
  
fwrite($manejadorDelFicheroDeLaCopia$encabezamientoDeLaCopia); 
  
fclose($manejadorDelFicheroDeLaCopia);     
 

  
$matrizDeTablas = array();
  
$indiceDeLaMatrizDeTablas 0;
  
$listadoDeTablas mysql_list_tables($dbname);
  for(
$recorridoDeTablas=0$recorridoDeTablas<mysql_num_rows($listadoDeTablas); $recorridoDeTablas++){     
    
$nombreDeTabla mysql_tablename($listadoDeTablas,$recorridoDeTablas);
    if (
$nombreDeTabla <>"") {
      
$matrizDeTablas[$indiceDeLaMatrizDeTablas] = mysql_tablename($listadoDeTablas,$recorridoDeTablas);

      
$indiceDeLaMatrizDeTablas++;
    }
  }
  


  for (
$recorridoDeTablas 0$recorridoDeTablas $indiceDeLaMatrizDeTablas$recorridoDeTablas++){

    
$autoincrementado="";
    
$nombreDeTabla=$matrizDeTablas[$recorridoDeTablas];

    
$cadenaSQL "";
    
$cadenaSQL .= "DROP TABLE IF EXISTS $nombreDeTabla; \n";
    
$cadenaSQL .= "CREATE TABLE $nombreDeTabla (\n";


    
$hacerConsultaDeLecturaDeEstructura mysql_query("SHOW FIELDS FROM $nombreDeTabla",$conexion);

    while(
$row mysql_fetch_array($hacerConsultaDeLecturaDeEstructura)) {
      
$cadenaSQL .= "    $row[Field] $row[Type]"
      if (
$row["Default"] != ""$cadenaSQL .= " DEFAULT '$row[Default]'"
      if (
$row["Null"] != "YES"$cadenaSQL .= " NOT NULL"
      if (
$row[Extra] != ""$cadenaSQL .= " $row[Extra]"
      if (
strstr (strtolower($row[Extra]),"auto_increment")) $autoincrementado=$row[Field];
      
$cadenaSQL .= ",\n"
    }


    
$cadenaSQL ereg_replace(",\n$",""$cadenaSQL);


    
$hacerConsultaDeLecturaDeEstructura mysql_query("SHOW KEYS FROM $nombreDeTabla",$conexion);
    while(
$row mysql_fetch_array($hacerConsultaDeLecturaDeEstructura)){
      
$nombreDeIndice=$row[Key_name];
      if((
$nombreDeIndice != "PRIMARY") && ($row[Non_unique] == 0)) $nombreDeIndice="UNIQUE|$nombreDeIndice";
      if(!isset(
$listaDeIndices[$nombreDeIndice])) $listaDeIndices[$nombreDeIndice] = array();
      
$listaDeIndices[$nombreDeIndice][] = $row[Column_name];
    }

    
$autoIncluido=FALSE;
    while(list(
$tipoDeIndice$columnas) = @each($listaDeIndices)){
      
$cadenaSQL .= ",\n";
      if(
$tipoDeIndice == "PRIMARY"$cadenaSQL .= "   PRIMARY KEY (" implode($columnas", ") . ")";
      else if (
substr($tipoDeIndice,0,6) == "UNIQUE"$cadenaSQL .= "   UNIQUE ".substr($tipoDeIndice,7)." (" implode($columnas", ") . ")";
      else 
$cadenaSQL .= "   KEY $tipoDeIndice (" implode($columnas", ") . ")";
      if (
implode($columnas", ")==$autoincrementado$autoIncluido=TRUE;
    }
    if (!
$autoIncluido && $autoincrementado>""$cadenaSQL .= ",\n   KEY $autoincrementado (" $autoincrementado ")";
        
    
$cadenaSQL .= "\n); \n";

    
$manejadorDelFicheroDeLaCopia fopen($ficheroDeLaCopia,"a+b"); 
    
fwrite($manejadorDelFicheroDeLaCopia"# Tabla: ".$nombreDeTabla."\n\r".$cadenaSQL); 
    
fclose($manejadorDelFicheroDeLaCopia);



    unset(
$lineaDeDatos);

    if (
$nombreDeTabla>""){ 

      
$hacerConsultaDeLecturaDeDatos=mysql_query("SELECT * FROM $nombreDeTabla"$conexion); 
      
$totalDeRegistrosmysql_num_rows ($hacerConsultaDeLecturaDeDatos); 
      
$totalDeCampos mysql_num_fields($hacerConsultaDeLecturaDeDatos); 

      for (
$cuentaDeRegistros=0;$cuentaDeRegistros<$totalDeRegistros;$cuentaDeRegistros++){
        
$matrizDeDatos=mysql_fetch_array($hacerConsultaDeLecturaDeDatos);
        
$lineaDeDatos.="INSERT INTO $nombreDeTabla ("
        for (
$cuentaDeCampos 0$cuentaDeCampos $totalDeCampos;$cuentaDeCampos++){
          
$nombreDeCampo mysql_field_name($hacerConsultaDeLecturaDeDatos$cuentaDeCampos); 

          if(
$cuentaDeCampos == ($totalDeCampos 1)){ 
            
$lineaDeDatos.= $nombreDeCampo
          } else { 
            
$lineaDeDatos.= $nombreDeCampo.",";
          }
        }

        
$lineaDeDatos.=") VALUES (";

        for (
$cuentaDeCampos=0;$cuentaDeCampos $totalDeCampos;$cuentaDeCampos++){ 
          if(
$cuentaDeCampos == ($totalDeCampos 1)){ 
            
$lineaDeDatos.="'".addslashes($matrizDeDatos[$cuentaDeCampos])."'"
          } else { 
            
$lineaDeDatos.="'".addslashes($matrizDeDatos[$cuentaDeCampos])."',";
          }

        } 
        
$lineaDeDatos.= ");\n"
      } 
      
$lineaDeDatos.= "\n";
    }

    
$manejadorDelFicheroDeLaCopia fopen($ficheroDeLaCopia,"a+b"); 
    
fwrite($manejadorDelFicheroDeLaCopia$lineaDeDatos); 
    
fclose($manejadorDelFicheroDeLaCopia);    
  }
  
header('Content-type: text/x-delimtext;');
  
header('Content-Disposition: attachment; filename="'.$ficheroDeLaCopia.'"');
  
readfile($ficheroDeLaCopia);
  
unlink ($ficheroDeLaCopia);
  
    }
else
    {
header("location: ../conexion/logout.php");
}
?>
este realiza el backup de mi base de datos de maravilla, el problema que he encontrado es que no me esta poniendo el Engine=innodb , asi como la codificacion con la cual trab por ejemplo:
DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci


ademas he intentado que me muestre las relaciones que hay entre las distintas tablas por ejemplo que me las muestre asi:

Código:
ALTER TABLE `procedencia`
  ADD CONSTRAINT `procedencia_ibfk_1` FOREIGN KEY (`nocedula`) REFERENCES `estudiante` (`nocedula`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `procedencia_ibfk_2` FOREIGN KEY (`idMunicipio`) REFERENCES `municipio` (`idMunicipio`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `RefEstudiante92` FOREIGN KEY (`nocedula`) REFERENCES `estudiante` (`nocedula`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `RefEstudiante921` FOREIGN KEY (`nocedula`) REFERENCES `estudiante` (`nocedula`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `RefMunicipio89` FOREIGN KEY (`idMunicipio`, `idDepartamento`) REFERENCES `municipio` (`idMunicipio`, `idDepartamento`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `RefMunicipio891` FOREIGN KEY (`idMunicipio`, `idDepartamento`) REFERENCES `municipio` (`idMunicipio`, `idDepartamento`);
ademas de intentar de mil maneras que me incluya los procedimientos almacenados alguna idea???? muchas gracias