New question

Question:

Date: 04-02-2015 22:58:14 (In Spanish)

bkp de resultado de consulta SQL[Resolved]

Necesito una vez traído los resultados de una consulta SQL hacer un backup en el formato .sql para descargarlo

Para el caso de una base de datos completa uso:

$commands = array("mysqldump --opt -h $dbhost -u $dbuser -p$dbpass -v $dbname > $backup_file", "bzip2 $backup_file");


pero ¿cómo puedo hacer para una consulta en particular?
Tags: Backup - MySQL - MySQL Administration - Question Votes: 0 - Answers: 9 - Views: 12 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 05-02-2015 00:25:35 Saludos,
    Ramiro, no me queda claro qué es lo que deseas guardar, porque mencionas un archivo en formato .sql, o sea, ¿deseas guardar la propia consultas que hagas? o ¿deseas guardar los resultados de desa consulta en forma de INSERT's para insertarlos en otra bd?
    ¿Exactamente qué deseas guardar en un archivo .sql (que solo guarda comandos SQL)?
      Votes: 0 - Link answer
     
  • Date: 05-02-2015 00:52:18 Lo segundo, deseo guardar los resultados de esa consulta para poder tenerlo como bkp y poder subirlos a otra base   Votes: 0 - Link answer
     
  • Date: 05-02-2015 01:23:03 Bueno, la solución es hacer un método que construya una consulta SQL con una serie de INSERT's a partir de esos resultados. Suponiendo que los resultados de tu consultan vengan en el array $results, tendrías que recorrerlo y con ellos construir la consulta. Claro que hay detalles a tener en cuenta, como por ejemplo si los nombres de las tablas y la estructura en general no varía de la bd origen a la(s) destino(s). Si esto no es así el proceso se complejizaría bastante.
    Por cierto, en el ejemplo que pones para una base de datos completa, eso genera un backup de la base de datos, que no es lo mismo que lo que quieres hacer...
      Votes: 0 - Link answer
     
  • Date: 05-02-2015 02:11:58 Hola Ramiro,
    Ten en cuenta que un archivo SQL de respaldo (y hago énfasis en RESPALDO) sólo puede contener sentencias DDL y DML. Si tu consulta es una consulta de más de una tabla no vas a poder generar un archivo como el que pides pero si es de una sola tabla entonces complementa el comando mysqldump con las opciones TABLES y WHERE.
      Votes: 0 - Link answer
     
  • Date: 05-02-2015 05:56:34 Hola Ramiro,

    Para hacer un BACKUP de una solo tabla puedes utilizar la utilidad de linea de comandos "mysqldump" (la misma que usas para hacer el BACKUP de toda tu base de datos)

    El comando que te permitirá hacer BACKUP de la tabla es el siguiente:

    mysqldump --opt -u DBUSER -h DBHOST -pPASSWORD DBNAME TABLENAME > /FULLPATH/TABLENAME.sql
    


    Nota: para el que no sepa que hace el parámetro "--opt", les cuento que es una abreviatura de las directivas: --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset

    Siguiendo la lógica del script que indicas en tu pregunta, el comando quedaría así:

    $commands = array("mysqldump --opt -u $dbuser -h $dbhost -p$dbpass $dbname $tablename > $backup_table_file", "bzip2 $backup_table_file");
    


    Y si bien no lo preguntaste, pero seguramente lo necesitarás, para hacer el RESTORE de la tabla podrás utilizar la utilidad "mysql" de la siguiente forma:

    mysql -u DBUSER -h DBHOST -pPASSWORD DBNAME < /FULLPATH/TABLENAME.sql
    


    Espero que mi respuesta te sea de ayuda.

    Saludos y buen código!
      Votes: 1 - Link answer
     
  • Date: 05-02-2015 06:31:12 Gracias Fernando muy buen aporte... y si en vez de una tabla seria una consulta de esa tabla? algo como lo que decia HERNESTO ....

    ejemplo

    "SELECT * FROM CLIENTES WHERE STATUS = 1" .... ese resultado lo quiero guardar en formato .sql

    He probado con exportarlo a .csv pero no me gusta el traspaso...
      Votes: 0 - Link answer
     
  • Date: 05-02-2015 10:36:50 Ramiro, lo que quieres hacer es un select desde PHP, y el resultado (que será un array de clientes) guardarlo en un archivo con extensión .sql ?

    Si es así, dentro del archivo .sql ¿qué quieres guardar?, por lo general se guardan las sentencias tipo:

    INSERT INTO CLIENTES (campo1, campo2, ..., campox) VALUES ('xxxxx', 'xxxxx', ..., 'xxxxx');
    


    Si es así, vas a tener que hacer un foreach del resultado del select (el array) y por cada iteración armar el INSERT y concatenerlo en un string "$resultado", que finalmente con la ayuda de la function file_put_contents() vas a tenerminar escribiendo a disco el archivo .sql, algo como:

    file_put_contents('archivo.sql', $resultado);


    Saludos,
    Fernando
      Votes: 1 - Link answer
     
  • Date: 06-02-2015 00:34:36 Me decidi al final por hacer bkp una sola tabla con

    $commands = array("mysqldump --opt -h $dbhost -u $dbuser -p$dbpass -v $dbname $tablename > $backup_table_file", "bzip2 $backup_table_file");
    


    pero me devuelve un file sin los datos/estructura de la tabla, y si lo quiero importar con phpMyadmin me dice " MySQL ha devuelto un conjunto de valores vacío (es decir: cero columnas). "
      Votes: 0 - Link answer
     
  • Date: 06-02-2015 02:12:37 Hola Ramiro, comprueba la variable $tablename que este bien especificada, ya que si no indicas el nombre correcto de la tabla, mysqldump hace exactamente lo que comentas, te crea un archivo dump sin estructura y sin datos.

    Apovechando que incluiste el parámetro -v (verbose), podes verificar la salida del dump, si es correcta debería ser algo como:

    -- Connecting to localhost...
    -- Retrieving table structure for table clientes...
    -- Sending SELECT query...
    -- Retrieving rows...
    -- Disconnecting from localhost...
    


    Si el nombre de la tabla esta mal, debería darte una salida como:

    -- Connecting to localhost...
    mysqldump: Couldn't find table: "clintes"
    


    Saludos,
      Votes: 1 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com