Ver Mensaje Individual
  #5 (permalink)  
Antiguo 27/03/2016, 01:42
Avatar de a2garrido
a2garrido
 
Fecha de Ingreso: diciembre-2013
Mensajes: 6
Antigüedad: 10 años, 4 meses
Puntos: 2
Respuesta: BACKUP Y RESTORE de MYSQL (muy bueno)

2ª Parte continuación de Restaurar de 2016
Código PHP:
  // PROBLEMAS EN LA INTERPRETACION DEL JUEGO DE CARACTERES
    $strSQL= convertir_utf8($strSQL);
    
    // Elimina lineas vacias o que empiezan por -- #   //   o entre /* y */
    // Elimna los espacios en blanco entre ; y \r\n
    // handle DOS and Mac encoded linebreaks
    $strSQLs=preg_replace("/\r\n$/","\n",$strSQLs);
    $strSQLs=preg_replace("/\r$/","\n",$strSQLs);
    $strSQLs = trim(preg_replace('/ {2,}/', ' ', $strSQLs));    // ----- remove multiple spaces ----- 
    $strSQLs = strtr($strSQLs, array("\r" =>""));                     //los \r\n los dejamos solo en \n
    if ($fixUtf8) {    $strSQLs = strtr($strSQLs, array("latin1" => "utf8"));}
    $BD=CadenaAcotada($strSQLs,"USE `","`");
    if(!empty($NewBD)) {
        if ($BD) $strSQLs = strtr($strSQLs,array("`".$BD."`" => "`".$NewBD."`")); 
        echo "********** $BD --> $NewBD ******************************************";
        $BD =$NewBD;
    }
    
    run_sql($strSQLs,$BD, $host, $usuario,$passwd, $DropDataBase,$InsertDatos,$VerSoloErrores,$tblName);

    
    echo " <br>---FIN IMPORTACION---";    
    return $BD;
}
?>
<h3>RESTAURAR COPIA DE SEGURIDAD MySQL. (version: 21-2-2016) ---------> <a href='BackupMySQL-i.php'> Ir a BackupMySQL-i.php <a> </h3>
<FORM action="<?php echo $_SERVER['PHP_SELF']?>" method="POST" enctype="multipart/form-data">
    <p><b>Fichero (*.sql):</b> 
    <INPUT type="file"  name="userfile"><br />
    <INPUT type="hidden" name="MAX_FILE_SIZE" value="<?php echo MAXFILESIZE?>">
    <b>Servidor &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</b> 
    <INPUT type="text" name="host" id ="host" value="localhost"><br />
    <b>Usuario &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:</b> 
    <INPUT type="text" name="usuario" id ="usuario" value="root"><br />
    <b>Contrase&ntilde;a : </b> 
    <INPUT type="text" name="passwd" id="passwd" value="gtjclm"><br />
    <input name="DropDataBase" id="DropDataBase" type="checkbox" value="true" TITLE="Primero DROP DATABASE"/>  Primero ejecutar DROP DATABASE <br />
    <input name="InsertDatos" id="InsertDatos" type="checkbox" value="true" checked="checked" TITLE="Restaurar inserciones de datos "/>  Restaurar inserciones de datos <br />
    <input name="VerSoloErrores" id="VerSoloErrores" type="checkbox" value="true" checked="checked" />  Mostrar solo errores (no cada linea de ejecucion) <br />
    <input name="fixUtf8" id="fixUtf8" type="checkbox" value="true"  />Cambiar charset a utf8 <br />
    <br />
    O P C I O N A L <br />
    <b>Restaurar solo la Tabla :</b> <INPUT type="text" name="tblName" id ="tblName" value=""><br />
    <b>Restaurar en otra Base de Datos con nombre distinto al que origino la copia: </b>: <INPUT type="text" name="NewBD" id="NewBD" value="">
    </p>
  <h6>( <u>nota:</u> Restaurar en otra Base de Datos se usa para restaurar en cualquier otra Base de datos distinta a la que se genero la copia. Si no existe la nueva base de datos, la crea. <br> SI HAY UNA TABLA o VISTA CON EL MISMO NOMBRE DE LA BASE DE DATOS QUE ORIGINO LA COPIA DE SEGURIDAD, FALLARA LA IMPORTACION EN OTRA BASE DE DATOS CON NOMBRE DISTINTO)</h6>
    <INPUT type="submit" name="upload" id="upload" value="[ Restaurar ]">
    <BR /><BR />
    <b> Base datos para ejecutar SQL &nbsp;&nbsp;:</b> 
    
    
    <?PHP    //<INPUT type="text" name="BD" id ="BD" value=" <?PHP echo $BD; ? > ">
    
$conexion = new mysqli($host$usuario$passwd) or die ("No se puede conectar con MySQL: %s\n"$conexion->connect_error);
    if (!
$conexion->set_charset("utf8")) {  // cambiar el conjunto de caracteres a utf8 
        
printf("Error cargando el conjunto de caracteres utf8: %s\n"$conexion->error);
        exit();
    }
    
$strSQL "SHOW DATABASES;"//SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = :database AND TABLE_NAME = :table
    
$respuesta $conexion->query($strSQL)or die("No se puede ejecutar la consulta: $strSQL MySQL: \n"$conexion->error);
    
$BaseDatos $respuesta->num_rows;
    
$opcionesSelect="";
    while (
$BaseDatos $respuesta->fetch_array(MYSQLI_NUM)) {
        if (
$BaseDatos[0] == $BD){
            
$opcionesSelect.= "<option value='$BaseDatos[0]' selected='selected'> $BaseDatos[0] </option>";
        } else     
$opcionesSelect.= "<option value='$BaseDatos[0]'> $BaseDatos[0] </option>";
    }
    
$respuesta->free();
    
$conexion->close();    
    echo 
"<select name='BD' id='BD' size='$BaseDatos' >
                        $opcionesSelect
                        </select> <BR />"
;
    
?>
<br />
    
    
    <INPUT type="submit" name="runSQL" id="runSQL" value="[ Seleccionar Base Datos ]" 

/>
</FORM>
<?PHP

if (isset($_POST['DoSQL'])) {
    echo 
"procesando peticion de formulario SQL.....";
    
// CONEXION 
    
$conexion = new mysqli($host$usuario$passwd,$BD) or die ("No se puede conectar con MySQL: %s\n"$conexion->connect_error);
    if (!
$conexion->set_charset("utf8")) {  // cambiar el conjunto de caracteres a utf8 
        
printf("Error cargando el conjunto de caracteres utf8: %s\n"$conexion->error);
        exit();
    }
    if (!empty(
$_POST['Tablas']))    
        foreach (
$_POST['Tablas'] as $tabla){
            Switch (
$_POST['OpSQL']){
                case 
'Select':
                    
$strSQL="SELECT * FROM `".$tabla."`; ";
                    echo 
"<BR /><BR /><BR /><BR /><BR /><H1><U>".$tabla."</U></H1>";
                    echo 
TableToHTML($conexion$strSQL);
                    break;
                case 
'Empty':
                    
$strSQL="TRUNCATE TABLE `".$tabla."`; ";
                    
$respuesta $conexion->query$strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
                    break;
                case 
'Drop':
                    
$strSQL="DROP TABLE `".$tabla."`; ";
                    
$respuesta $conexion->query$strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
                    break;
                case 
'Rename'
                    
$newTabla $tabla.date("_d_m_Y");
                    
$strSQL="RENAME TABLE `".$tabla."` TO ".$newTabla.";  ";
                    
$respuesta $conexion->query$strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);    
                    break;
                case 
'Duplicate':
                    
$newTabla $tabla.date("_d_m_Y");
                    
$strSQL="CREATE TABLE `".$newTabla."` LIKE `".$tabla."`;  ";
                    
$respuesta $conexion->query$strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
                    
$strSQL="ALTER TABLE `".$newTabla."` DISABLE KEYS;  ";
                    
$respuesta $conexion->query$strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
                    
$strSQL="INSERT INTO `".$newTabla."` SELECT * FROM  `".$tabla."`;  ";
                    
$respuesta $conexion->query$strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
                    
$strSQL="ALTER TABLE `".$newTabla."` ENABLE KEYS; ";
                    
$respuesta $conexion->query$strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
                    
$strSQL='SELECT CONCAT_WS(" "," CREATE TRIGGER ",CONCAT_WS("_","'.$tabla.'", ACTION_TIMING,EVENT_MANIPULATION), ACTION_TIMING,EVENT_MANIPULATION, " ON '.$tabla.' FOR EACH ROW ",ACTION_STATEMENT," " ) AS x
                            FROM INFORMATION_SCHEMA.TRIGGERS
                            WHERE TRIGGER_SCHEMA = database() AND EVENT_OBJECT_TABLE = "'
.$tabla.'";';
                    
$rs $conexion->query$strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);
                    
$num_rows$rs->num_rows;
                    if ( 
$num_rows <> 0) {
                        While  (
$regSELECT$rs->fetch_assoc()){
                            
$strSQL=$regSELECT["x"];
                            
$rsRUN $conexion->query$strSQL )or die("No se puede ejecutar la consulta: $strSQL MySQL: \n".$conexion->error);    
                        }
                    }        
                    break;
                case 
'ShowCreateTable':
                    
$strSQL="SHOW CREATE TABLE `".$tabla."`";
                    echo 
"<BR /><BR /><BR /><BR /><BR /><H1><U>".$strSQL."</U></H1>";
                    echo 
TableToHTML($conexion$strSQL);
                    
$strSQL='SELECT "'.$tabla.'" as Tabla,CONCAT_WS(" "," CREATE TRIGGER ",CONCAT_WS("_","'.$newTabla.'",ACTION_TIMING,EVENT_MANIPULATION), ACTION_TIMING,EVENT_MANIPULATION, " ON '.$newTabla.' FOR EACH ROW ",ACTION_STATEMENT," " ) AS Def_TRIGGER
                            FROM INFORMATION_SCHEMA.TRIGGERS
                            WHERE TRIGGER_SCHEMA = database() AND EVENT_OBJECT_TABLE = "'
.$tabla.'";';
                    echo 
TableToHTML($conexion$strSQL);
                    break;
                case 
'ShowTableStatus':
                    
$strSQL="SHOW TABLE STATUS LIKE '".$tabla."' ";
                    echo 
"<BR /><BR /><BR /><BR /><BR /><H1><U>".$strSQL."</U></H1>";
                    echo 
TableToHTML($conexion$strSQL);
                    break;
            }
    }
    
    if (!empty(
$_POST["strSQL"])){
        echo 
"<BR /><BR /><H6><U>".$_POST["strSQL"]."</U></H6>";
        
$strSQLs $_POST["strSQL"];
        
$Instruccion=substr($strSQLs,0,4);
        if (
false === strripos("SHOW,SELE,DESC",$Instruccion)){
            
run_sql($strSQLs,$BD$host$usuario,$passwd$DropDataBase,$InsertDatos,$VerSoloErrores,$tblName);
        } else {
            echo 
TableToHTML($conexion$strSQLs);
        }
    }
        
    
$conexion->close();    
}