Foros del Web » Programando para Internet » PHP »

Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

Estas en el tema de Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE en el foro de PHP en Foros del Web. Hola compañeros. Tengo un problemón con un fichero SQL que contiene 89MB de sentencias SQL, e incluyen el CREATE TABLE pero no incluyen CREATE DATABASE ...
  #1 (permalink)  
Antiguo 09/12/2014, 14:17
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Exclamación Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

Hola compañeros.

Tengo un problemón con un fichero SQL que contiene 89MB de sentencias SQL, e incluyen el CREATE TABLE pero no incluyen CREATE DATABASE con lo que la importación en el servidor MySQL me es imposible.

He visto que en el fichero SQL hay un patrón que dice, en el momento que debe crear la base de datos, Base de datos: 'nombre de la bd'. El patrón es tal que así:

Código MySQL:
Ver original
  1. --
  2. -- Base de datos: `base_de_datos`
  3. --
  4.  
  5. -- --------------------------------------------------------
  6.  
  7. --
  8. -- Estructura de tabla para la tabla `tabla`
  9. --
  10.  
  11. CREATE TABLE IF NOT EXISTS `tabla` (
  12. `ID` int(10) NOT NULL,
  13.   `time` varchar(255) NOT NULL DEFAULT '',
  14.   `ufrom` varchar(255) NOT NULL DEFAULT '',
  15.   `ufrom_id` int(10) NOT NULL DEFAULT '0',
  16.   `userto` varchar(255) NOT NULL DEFAULT '',
  17.   `userto_id` int(10) NOT NULL DEFAULT '0',
  18.   `text` varchar(255) NOT NULL DEFAULT ''
  19. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  20.  
  21. -- --------------------------------------------------------
  22.  
  23. --
  24. -- Estructura de tabla para la tabla `client`
  25. --
  26.  
  27. CREATE TABLE IF NOT EXISTS `client`
  28.  
  29. /* etc etc **/

Habría alguna manera de crear un script en php, o alguno ya creado, que entienda el patrón para crear la base de datos antes de ejecutar las sentencias?
El patrón que debería encontrar sería:

Código:
--
-- Base de datos: `base_de_datos`
--
Gracias por vuestra ayuda y un fuerte abrazo.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #2 (permalink)  
Antiguo 09/12/2014, 14:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

¿Y porqué no creas la base de datos antes de importar?

Es decir, para ejecutar la consulta a través de PHP necesitas dos cosas: la conexión a la base de datos, y que selecciones una base de datos previamente.

¿Cómo pretendes crear la base de datos de manera automática si necesitas una conexión (y base de datos) para ejecutar dicha instrucción?

Es el problema del huevo y la gallina.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 09/12/2014, 14:35
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

Entonces no me he explicado bien.
En el fichero SQL hay unas 300 bases de datos diferentes, con sus tablas (estructura y datos). Lo único que falta en el fichero es el CREATE DATABASE que se especifica en el patrón que dije en el post.
Si tengo que crear 300 bases de datos a mano me pego un tiro, además de que no me serviría de mucho pues el fichero sólo incluye los create tables.

La idea sería un script que recorriera el fichero sql y que cuando encuentre el patrón de base de datos, haga un create database y las siguientes create tables e inserts que hay se meterían en esta base de datos recién creada, y así hasta llegar al siguiente match del patrón de base de datos.

¿Se entiende ahora?

Muchas gracias pateketrueke
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #4 (permalink)  
Antiguo 09/12/2014, 14:36
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

Ah, ya entiendo lo que dices, entonces no se puede hacer un CREATE DATABASE desde PHP? Epic fail... xD
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #5 (permalink)  
Antiguo 09/12/2014, 14:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

Cita:
Iniciado por CHuLoSoY Ver Mensaje
Ah, ya entiendo lo que dices, entonces no se puede hacer un CREATE DATABASE desde PHP? Epic fail... xD
Exacto, ese es el tema.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 09/12/2014, 15:08
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

Entonces tengo un buen problemón, todas esas bases de datos.... importarlas a mano? PFfff.

Oye y me podrías ayudar a convertir este fichero en ficheros individuales, cortándolo por ese patrón?
Lo que quiero decir es crear un fichero por cada patrón "base de datos" que se encuentre en el fichero padre. Esto sería posible?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #7 (permalink)  
Antiguo 10/12/2014, 02:59
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

He visto en el manual de PHP que sí se puede crear una base de datos desde PHP. Simplemente se hace un mysql_query con la mysql_connect que haya activa y luego se puede hacer el mysql_select_db.
Aquí el ejemplo:

Código PHP:
Ver original
  1. $enlace = mysql_connect('localhost', 'usuario_mysql', 'contraseña_mysql');
  2. if (!$enlace) {
  3.     die('No pudo conectarse: ' . mysql_error());
  4. }
  5.  
  6. $sql = 'CREATE DATABASE mi_bd';
  7. if (mysql_query($sql, $enlace)) {
  8.     echo "La base de datos mi_bd fue creada satisfactoriamente\n";
  9. } else {
  10.     echo 'Error al crear la base de datos: ' . mysql_error() . "\n";
  11. }

Entonces podríamos resolver algo con este tema?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #8 (permalink)  
Antiguo 10/12/2014, 06:13
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

subir un fichero de 89 MB vaya tela no ???, lo ideal sería que subieras el fichero y que php se encargara de ejecutar ese script de importar, más que nada porque puede que el server te tire por timeout
  #9 (permalink)  
Antiguo 10/12/2014, 06:16
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 9 meses
Puntos: 29
Respuesta: Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

Ya lo sé, por eso vaya tela jajaja.
El tema es que encontré un script en php llamado BigDump y se encarga precisamente de insertar poco a poco por ajax todas las instrucciones de un sql gigante como el mío. Lo tengo probado y funciona perfectamente con ficheros de hasta 400 MB. El problema que tengo es poder modificar este tipo de scripts como bigdump para que reconozca ese patrón de base de datos y crearla antes de las sentencias. Una vez creada se ejecutaría el select_db() para meter las sentencias en esa bd.

Tenéis alguna idea?

Sino también me vale la opción que propuse antes, de cortar el fichero en X subficheros.

Saludos.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #10 (permalink)  
Antiguo 10/12/2014, 06:28
nfo
 
Fecha de Ingreso: octubre-2008
Ubicación: EsPaCiO TiEmPo
Mensajes: 408
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Importar fichero SQL (89 MB) sin sentencia CREATE DATABASE

Pues lo que puedes hacer esque justo cuando el fichero esta subido y validado, hacer un create database, y luego ya ejecutar las sentencias de insert con el bigdump

Etiquetas: create, database, fichero, mysql, patron, sql, table
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 22:10.