Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   como exportar una base da datos de mysql atravez de php (https://www.clubdelphi.com/foros/showthread.php?t=92015)

vroa74 28-06-2017 21:35:52

como exportar una base da datos de mysql atravez de php
 
me gustaria poder exportar una o unas bases de datos atravez de codigo php.
soy novato en php la verdad es que no se mucho vi alguno ejemplo mas sin embargo los resultados dista de se los que espero
por ejemplo este ejemplo:
Código PHP:


<?php
// variables
$dbhost 'example.org';
$dbname 'nombre-base-datos';
$dbuser 'usuario-base-datos';
$dbpass 'contraseña-base-datos';

$backup_file $dbname date("Y-m-d-H-i-s") . '.gz';

// comandos a ejecutar
$command "mysqldump --opt -h $dbhost -u $dbuser -p$dbpass $dbname | gzip > $backup_file";

// ejecución y salida de éxito o errores
system($command,$output);
echo 
$output;
?>

cuando hago la exportacion atravez de phpadmin y comparo con el resultado de este codigo es totalmente diferente.

lo que necesito yo es hacer lo que se hace el el phpadmin para exportar una base de datos atravex de codigo php y la verdad no se como hacerlo

Ñuño Martínez 03-07-2017 10:54:02

Eso es porque "mysqldump" es un programa, no un comando SQL (o más exactamente, del DDL).

Puede hacerse todo vía SQL/DDL. La estructura de todas las bases de datos está almacenada en una base de datos, concretamente en information_schema.COLUMNS. Es decir, que puedes obtener la estructura completa con:
Código SQL [-]
  SELECT *
    FROM COLUMNS
  WHERE TABLE_SCHEMA = '%base_de_datos%';
A partir de los datos obtenidos puedes reconstruir las sentencias DDL de creación de tablas ("CREATE TABLE ..."). A continuación haces consultas para obtener los datos de cada tabla, y ya tienes todo lo necesario para exportar tu base de datos.

Evidentemente tienes que conectarte a la base de datos "information_schema", lo cual sólo puede hacerse con un usuario con los permisos adecuados.

roman 26-07-2017 22:28:51

Algunas observaciones:
  • Aunque mysqldump es un programa externo, sí que podría invocarse desde php. De hecho system o shell_exec deberían funcionar y habría que ver en específico qué resultado le da al compañero y así determinar qué falla.

  • Para usar information_schema no hace falta tener permisos especiales. information_schema consiste de "vistas" especiales que muestran información según el usuario que las pida. Si el usuario tiene acceso a las bases de datos X, Y y Z entonces sólo verá información des esas bases.

  • Reconstruir la estructura de una tabla a partir de information_schema me parece una tarea titánica, sobre todo cuando podemos hacer:

    Código SQL [-]
    show create table tabla

    :)

En cuanto a porqué le falla no estoy seguro, pero me parece que no se puede concatenar la salida de mysqldump (o de ningún comando para tal caso) con gzip. Habría primero que crear el archivo de salida:

Código:

mysqldump --opt -h $dbhost -u $dbuser -p$dbpass $dbname  > backup.sql
y luego pasarlo a gzip:

Código:

gzip backup.sql
Cada cosa con system o shell_exec.

LineComment Saludos

roman 26-07-2017 22:34:54

Corrijo:

En mi versión de linux sí se puede concatenar con gzip pero usando la opción -f:

Código:

mysqldump --opt -h $dbhost -u $dbuser -p$dbpass $dbname | gzip -f > $backup_file
LineComment Saludos


La franja horaria es GMT +2. Ahora son las 13:19:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi