Foros del Web » Programando para Internet » PHP »

problema al realizar backup de una base de datos

Estas en el tema de problema al realizar backup de una base de datos en el foro de PHP en Foros del Web. estoy usando el codigo posteado en un thread de este foro Código PHP: <?php /* Usuario para la conexion a Mysql. */ $usurio  =  "root" ; /* Password para la conexion a Mysql. */ $passwd  =  "root" ;   ...
  #1 (permalink)  
Antiguo 27/01/2010, 00:46
 
Fecha de Ingreso: enero-2009
Mensajes: 126
Antigüedad: 15 años, 3 meses
Puntos: 1
problema al realizar backup de una base de datos

estoy usando el codigo posteado en un thread de este foro

Código PHP:
<?php
/* Usuario para la conexion a Mysql. */
$usurio "root";
/* Password para la conexion a Mysql. */
$passwd "root";
 
/* Host para la conexion a Mysql. */
$host "localhost";
/* Base de Datos que se seleccionará. */
$bd "test";
/* 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($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+\] => .*)\n/'$representacion$matches);
$info['tablas'] = implode(";  "$matches[1]);
$dump = <<<EOT
# +===================================================================
# | YoDumpeo! 
{$info['dumpversion']}
# | por fran86 <[email protected]>
# |
# | Generado el 
{$info['fecha']} a las {$info['hora']} por el usurio '$usurio'
# | Servidor: 
{$_SERVER['HTTP_HOST']}
# | MySQL Version: 
{$info['mysqlver']}
# | PHP Version: 
{$info['phpver']}
# | Base de datos: '$bd'
# | Tablas: 
{$info['tablas']}
# |
# +-------------------------------------------------------------------

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($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).");\n";
            unset(
$values);
    }
    
$dump .= <<<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($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 />\n<pre>\n$dump\n</pre>";
}
?>

con una de mis bases de datos funciona perfecto pero con la otra no
me sale el siguiente error: No se pudo ejecutar la consulta: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-59' at line 1 es decir esta linea
Código PHP:
or die("No se pudo seleccionar la Base de Datos: "mysql_error()); 

al parecer es porque mi base de datos contiene acentos u otros caracteres extraños.

Como puedo solucionar este incoveninte o cual es el real problema del porque no me genera el backup

O que alternativa de codigo me dan para hacer un backup desde php

PD: el motor que uso es el InnoDB
  #2 (permalink)  
Antiguo 27/01/2010, 14:10
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: problema al realizar backup de una base de datos

Si los acentos y caracteres extraños ya estan guardados en la base de datos no deben ocasionarte problema alguno al leerlos.

Por otra parte, el error te lo da en:

Código PHP:
Ver original
  1. mysql_select_db($bd, $conexion)
  2. or die("No se pudo seleccionar la Base de Datos: ". mysql_error());

... entonces el problema es al seleccionar la base de datos.

Cita:
Iniciado por mysql_error()
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-59' at line 1
Traduccion: Tienes un error en la sintaxis SQL; revisa el manual que corresponde a tu version de servidor MySQL para ver la sintaxis correcta a usar cerca de '-59' en la linea 1

Para buscar de donde sale ese -59 prueba:
or die("No se pudo seleccionar la Base de Datos:<br />Base de datos: $bd<br />Conexion: $conexion<br/>". mysql_error());
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 28/01/2010, 14:43
 
Fecha de Ingreso: enero-2009
Mensajes: 126
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: problema al realizar backup de una base de datos

disculpe me equivoque el error no me sale en la conexion el error sino en la consulta
Código PHP:
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];
    } 
el error es el siguiente: No se pudo ejecutar la consulta: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-59' at line 1

lo extraño es q con la base de datos que la cree enteramente en el phpmyadmin no me sale este error, pero con una base de datos que cree en el mysql workbench no se llega a generar el reporte y me sale el error antes mencionado
  #4 (permalink)  
Antiguo 28/01/2010, 15:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: problema al realizar backup de una base de datos

Ok, entonces prueba con:

or die("No se pudo ejecutar la consulta: $consulta<br/>". mysql_error());

Suponiendo que tu base de datos se llame test-59, entonces para evitar que -59 sea interpretado como una operacion matematica deberias usar:

$consulta = "SHOW TABLES FROM `$bd`";
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 28/01/2010, 18:07
 
Fecha de Ingreso: enero-2009
Mensajes: 126
Antigüedad: 15 años, 3 meses
Puntos: 1
(SOLUCIONADO) Respuesta: problema al realizar backup de una base de datos

Muchisimas gracias por responder era un error bastante sutil el problema es que en la base de datos que votaba el error tenia tablas con nobres como imc20-59
por lo que al seguir tu recomendacion de usar `` se solucino el poroblema

el fragmento que cambie fue este

Código PHP:
 $consulta "SHOW CREATE TABLE .`".$tabla."`;"
nuevamente muchas gracias Triby eres genial

Etiquetas: backup, realizar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:00.