Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Mysql (http://www.forosdelweb.com/f86/)
-   -   Exportar datos de mysql (http://www.forosdelweb.com/f86/exportar-datos-mysql-408349/)

ferranWEB 11/07/2006 02:21

Exportar datos de mysql
 
Buenas a todos,

tengo bases de datos en mysql, que administro con el phpMyAdmin. la cuestíon es que hago un backup diario de las bases de datos.

el problema es que tengo que entrar en el phpMyAdmin, exportar las bases de datos, y guardarlas en un zip que contiene un archivo de texto.

hay alguna forma de poder ejecutar esta tarea de una forma automatizada, que se ejecute a una hora del dia? tipo tarea programada de windows o algo asi? lo que no se si hay alguna sentencia para ello.

espero vuestra ayuda!!!

ferranWEB

claudiovega 11/07/2006 08:41

Si, trabajas en windows?
Puedes hacerlo a traves del comando mysqldump, o crear un script php que haga el trabajo. Con el script php tienes la posibilidad de crear el zip. En el foro de php tienes el script hecho, ejemplo este:

http://www.forosdelweb.com/showthrea...highlight=dump

Ya sea el comando o el script deben ser llamados desde una tarea programada, en windows. Si usas linux, es lo mismo, excepto que se llaman cron jobs.

ferranWEB 12/07/2006 03:29

buenas claudiovega, y gracias por responder.

la cosa es que este script ya lo probé en su dia. lo he vuelto a probar, y me da el siguiente error:

Parse error: parse error, unexpected T_VARIABLE in /home2/creasit/creasites-www/backup.php on line 122

te pongo el codigo de nuevo para que lo tengas presente:

Código:


<?php
/* Usuario para la conexion a Mysql. */
$usurio = "usuario";
/* Password para la conexion a Mysql. */
$passwd = "123456";
 /* Host para la conexion a Mysql. */
$host = "localhost";
/* Base de Datos que se seleccionará. */
$bd = "agenda";
/* Nombre del fichero que se descargará. */
$nombre = "dump.txt";
/* Determina si la tabla será vaciada (si existe) cuando  restauremos la tabla. */           
$drop = false;
/* 
* Array que contiene las tablas de la base de datos que seran resguardadas.
* Puede especificarse un valor false para resguardar todas las tablas
* de la base de datos especificada en  $bd.

* Ejs.:
* $tablas = false;
*    o
* $tablas = array("tabla1", "tabla2", "tablaetc");

*/
$tablas = false;
/* 
* Tipo de compresion.
* Puede ser "gz", "bz2", o false (sin comprimir)
*/
$compresion = false;

/* Conexion y eso*/
$conexion = mysql_connect($host, $usurio, $passwd)
or die("No se conectar con el servidor MySQL: ".mysql_error());
mysql_select_db($bd, $conexion)
or die("No se pudo seleccionar la Base de Datos: ". mysql_error());


/* Se busca las tablas en la base de datos */
if ( empty($tablas) ) {
    $consulta = "SHOW TABLES FROM $bd;";
    $respuesta = mysql_query($consulta, $conexion)
    or die("No se pudo ejecutar la consulta: ".mysql_error());
    while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM)) {
        $tablas[] = $fila[0];
    }
}


/* Se crea la cabecera del archivo */
$info['dumpversion'] = "1.1b";
$info['fecha'] = date("d-m-Y");
$info['hora'] = date("h:m:s A");
$info['mysqlver'] = mysql_get_server_info();
$info['phpver'] = phpversion();
ob_start();
print_r($tablas);
$representacion = ob_get_contents();
ob_end_clean ();
preg_match_all('/(\[\d+\] => .*)\n/', $representacion, $matches);
$info['tablas'] = implode(";  ", $matches[1]);
// en donde esta $dump=<<<EOT
$dump= "       
// xxx
//xxxxx
";    //  en donde esta el EOT; 

foreach ($tablas as $tabla) {
   
    $drop_table_query = "";
    $create_table_query = "";
    $insert_into_query = "";
   
    /* Se halla el query que será capaz vaciar la tabla. */
    if ($drop) {
        $drop_table_query = "DROP TABLE IF EXISTS `$tabla`;";
    } else {
        $drop_table_query = "# No especificado.";
    }

    /* Se halla el query que será capaz de recrear la estructura de la tabla. */
    $create_table_query = "";
    $consulta = "SHOW CREATE TABLE $tabla;";
    $respuesta = mysql_query($consulta, $conexion)
    or die("No se pudo ejecutar la consulta: ".mysql_error());
    while ($fila = mysql_fetch_array($respuesta, MYSQL_NUM)) {
            $create_table_query = $fila[1].";";
    }
   
    /* Se halla el query que será capaz de insertar los datos. */
    $insert_into_query = "";
    $consulta = "SELECT * FROM $tabla;";
    $respuesta = mysql_query($consulta, $conexion)
    or die("No se pudo ejecutar la consulta: ".mysql_error());
    while ($fila = mysql_fetch_array($respuesta, MYSQL_ASSOC)) {
            $columnas = array_keys($fila);
            foreach ($columnas as $columna) {
                if ( gettype($fila[$columna]) == "NULL" ) {
                    $values[] = "NULL";
                } else {
                    $values[] = "'".mysql_real_escape_string($fila[$columna])."'";
                }
            }
            $insert_into_query .= "INSERT INTO `$tabla` VALUES (".implode(", ", $values).");\n";
            unset($values);
    }
   
// en donde esta $dump=<<<EOT
$dump= "       
// xxx
//xxxxx
";    //  en donde esta el EOT; 


# | Vaciado de tabla '$tabla'
# +------------------------------------->
$drop_table_query


# | Estructura de la tabla '$tabla'
# +------------------------------------->
$create_table_query


# | Carga de datos de la tabla '$tabla'
# +------------------------------------->
$insert_into_query

EOT;
}

/* Envio */
if ( !headers_sent() ) {
    header("Pragma: no-cache");
    header("Expires: 0");
    header("Content-Transfer-Encoding: binary");
    switch ($compresion) {
    case "gz":
        header("Content-Disposition: attachment; filename=$nombre.gz");
        header("Content-type: application/x-gzip");
        echo gzencode($dump, 9);
        break;
    case "bz2": 
        header("Content-Disposition: attachment; filename=$nombre.bz2");
        header("Content-type: application/x-bzip2");
        echo bzcompress($dump, 9);
        break;
    default:
        header("Content-Disposition: attachment; filename=$nombre");
        header("Content-type: application/force-download");
        echo $dump;
    }
} else {
    echo "<b>ATENCION: Probablemente ha ocurrido un error</b><br />\n<pre>\n$dump\n</pre>";
}

y esa linea de error es la siguiente:

$create_table_query

incluso modifique una linea de codigo tal y como comenta algun compi,y nada de nada.a ver si puedes ayudarme.

saludos, y gracias!!

ferranWEB 12/07/2006 03:45

he vuelto a modificar lo que comentaba el email, y ahora me da este error:

Parse error: parse error, unexpected T_SL in /home2/creasit/creasites-www/backup.php on line 62

que falla ahora?

saludos

ferranWEB 13/07/2006 15:06

nadie puede ayudarme?

claudiovega 14/07/2006 08:50

Modifiqué el script para quitar los errores, pruébalo.

Código PHP:

<?php
    $usuario 
"usuario";
    
$passwd "password";
    
$host "localhost";
    
$bd "base";
    
$nombre "dump.txt";
    
// Borrar las tablas si existen?
    
$drop false;
    
// Tablas que se exportaran
    
$tablas false;
    
// Algoritmo de compresion a usar
    
$compresion false;

    
// Conexion a la bd
    
$conexion mysql_connect($host$usuario$passwd)
    or die(
"No se conectar con el servidor MySQL: ".mysql_error());
    
mysql_select_db($bd$conexion)
    or die(
"No se pudo seleccionar la Base de Datos: "mysql_error());

    
// Se busca las tablas en la base de datos
    
if ( empty($tablas) )
    {
        
$consulta "SHOW TABLES FROM $bd;";
        
$respuesta mysql_query($consulta$conexion)
        or die(
"No se pudo ejecutar la consulta: ".mysql_error());
        while (
$fila mysql_fetch_array($respuestaMYSQL_NUM))
            
$tablas[] = $fila[0];
    }

    
// Se crea la cabecera del archivo
    
$info['dumpversion'] = "1.1b";
    
$info['fecha'] = date("d-m-Y");
    
$info['hora'] = date("h:m:s A");
    
$info['mysqlver'] = mysql_get_server_info();
    
$info['phpver'] = phpversion();
    
ob_start();
    
print_r($tablas);
    
$representacion ob_get_contents();
    
ob_end_clean ();
    
preg_match_all('/(\[\d+\] => .*)\r\n/'$representacion$matches);
    
$info['tablas'] = implode(";  "$matches[1]);

    
// La variable del dump
    
$dump"";

    foreach (
$tablas as $tabla)
    {
        
$drop_table_query "";
        
$create_table_query "";
        
$insert_into_query "";

        
// Se halla el query que será capaz vaciar la tabla.
        
if ($drop)
            
$drop_table_query "DROP TABLE IF EXISTS `$tabla`;";
        else
            
$drop_table_query "# No especificado.";

        
// Se halla el query que será capaz de recrear la estructura de la tabla.
        
$create_table_query "";
        
$consulta "SHOW CREATE TABLE $tabla;";
        
$respuesta mysql_query($consulta$conexion)
        or die(
"No se pudo ejecutar la consulta: ".mysql_error());

        while (
$fila mysql_fetch_array($respuestaMYSQL_NUM))
            
$create_table_query $fila[1].";";

        
// Se halla el query que será capaz de insertar los datos.
        
$insert_into_query "";
        
$consulta "SELECT * FROM $tabla;";
        
$respuesta mysql_query($consulta$conexion)
        or die(
"No se pudo ejecutar la consulta: ".mysql_error());
        while (
$fila mysql_fetch_array($respuestaMYSQL_ASSOC))
        {
            
$columnas array_keys($fila);
            foreach (
$columnas as $columna)
            {
                if ( 
gettype($fila[$columna]) == "NULL" )
                    
$values[] = "NULL";
                else
                    
$values[] = "'".mysql_real_escape_string($fila[$columna])."'";
            }
            
$insert_into_query .= "INSERT INTO `$tabla` VALUES (".implode(", "$values).");\r\n";
            unset(
$values);
        }

        
$dump .="
        // xxx
        //xxxxx



        # | Vaciado de tabla '$tabla'
        # +------------------------------------->
        $drop_table_query


        # | Estructura de la tabla '$tabla'
        # +------------------------------------->
        $create_table_query


        # | Carga de datos de la tabla '$tabla'
        # +------------------------------------->
        $insert_into_query

        " 
;
    }

    if ( !
headers_sent() )
    {
        
header("Pragma: no-cache");
        
header("Expires: 0");
        
header("Content-Transfer-Encoding: binary");
        switch (
$compresion)
        {
            case 
"gz":
                
header("Content-Disposition: attachment; filename=$nombre.gz");
                
header("Content-type: application/x-gzip");
                echo 
gzencode($dump9);
                break;
            case 
"bz2":
                
header("Content-Disposition: attachment; filename=$nombre.bz2");
                
header("Content-type: application/x-bzip2");
                echo 
bzcompress($dump9);
                break;
            default:
                
header("Content-Disposition: attachment; filename=$nombre");
                
header("Content-type: application/force-download");
                echo 
$dump;
        }
    }
    else
        echo 
"<b>ATENCION: Probablemente ha ocurrido un error</b><br />\r\n<pre>\r\n$dump\r\n</pre>";
?>


khrisjian 07/09/2006 08:54

Al exportar...
 
Una pregunta no conosco mucho de PhpMyAdmin, mi pregunta es simple,
cuando exporto una base datos via web para descargarme una copia de seguridad en formato por ejemplo EXCEL, se genera algun log? o alguna forma de saber quien fue el que hizo esta copia? y se garde dentro de algun registro en mi PhpMyAdmin ???


La zona horaria es GMT -6. Ahora son las 04:47.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.