2009-03-25 32 views
13

Importación de una base de datos MySQL de 400 MB (sin comprimir). Estoy usando BigDump, y estoy recibiendo este error:Error de base de datos de importación de MySQL debido a las inserciones extendidas

Stopped at the line 387. 

At this place the current query includes more than 300 dump lines. That can happen if your dump file was created by some tool which doesn't place a semicolon followed by a linebreak at the end of each query, or if your dump contains extended inserts. Please read the BigDump FAQs for more infos. 

creo que el archivo contiene inserciones extendido, sin embargo no tengo manera de regenerar la base de datos ya que se ha eliminado del servidor antiguo. ¿Cómo puedo importar esta base de datos o convertirla para importar?

Gracias por cualquier ayuda.

Mejor Nick

EDIT: Parece ser la única solución viable es la de separar los insertos largos, pero todavía necesita ayuda para saber cómo dividir el archivo como la respuesta a continuación sugiere. Por favor ayuda. Gracias.

Respuesta

4

Pude importar la base de datos con éxito después de aumentar el búfer de memoria y hacer una importación de mysql ordinaria a través de SSH.

He utilizado el siguiente comando con la ruta absoluta:

mysql -u <username> -p < /home/dir/dumpfile.sql 

Mejor Nick

+0

¿Cómo aumentó el buffer de memoria? Me doy cuenta de que es una vieja pregunta, pero estoy teniendo un problema similar. – chmac

+1

@chmac Fue hace mucho tiempo, pero creo que la configuración era innodb_buffer_pool_size en my.cnf o my.ini. –

8

sólo editar el archivo de volcado de manera que después de 300 inserciones se inicia una nueva declaración:

INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES 
    (1, 'a', 'b'), 
    (2, 'c', 'd'), 
    (3, 'e', 'f'), 
    -- snip -- 
    (300, 'w', 'x'); 
INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES 
    (301, 'y', 'z'), 
    (302, ... etc 

Usted puede hacer esto con sólo abrir su archivo <backup>.sql en cualquier editor de texto, que es sólo texto sin formato. A veces, una copia de seguridad puede ser un archivo .gz o .bz, pero solo son cremalleras: si descomprime estos archivos comprimidos o comprimidos, terminará con un único archivo .sql que puede editar fácilmente.

Probablemente no sería demasiado difícil escribir un script para dividir cada declaración después de un número arbitrario de líneas. La lógica básica del programa se vería así, quizás:

  1. busque una línea que comience por "INSERTAR".
  2. copiar la línea hasta el final de la palabra "VALORES"
  3. recorrer todas las líneas siguientes, contando a medida que avanza.
  4. si su contador llega a 300, luego agregue un punto y coma al final de la última línea y pegue en la instrucción "INSERTAR ... VALORES" de antes. Restablecer el contador a 1 y vaya al paso 3.
  5. si se llega a una línea que comienza con "Insertar", restablecer el contador a 1 y vaya al paso 2.

Aunque, sólo podía hacer esto uno manualmente, y luego asegúrese de que todas las copias de seguridad futuras no usen inserciones extendidas. Además, phpMyAdmin le permite establecer un tamaño máximo de declaración al crear una exportación, por lo que básicamente hará lo anterior por usted.

Sin embargo, lo que hizo con el límite de memoria es probablemente una solución mucho más fácil. Para cualquier otra persona en una situación similar que no pueda cambiar esos límites, intente lo anterior.

+0

¿Cómo puedo editar el archivo? No tengo idea de cómo automatizar este proceso. –

+0

He editado ahora para responder. – nickf

29

No es necesario realizar ningún cambio al archivo .sql: BigDump simplemente abierta.php en cualquier editor de texto, busque la línea

define ('MAX_QUERY_LINES',300); 

y reemplace 300 con lo que desee.

+4

Esto lo hizo por mí, gracias. A excepción de bigdump.php versión 0.35b, la línea es: $ max_query_lines = 300; – nwilson5

3

Para mí que funcionaba de la siguiente manera:

Buscar

$max_query_lines = 300; 

entonces simplemente reemplazado a

$max_query_lines = 3000; 
0

vieja pregunta, pero lo encontré a través búsqueda en Internet, y aún no tiene la respuesta que estaba buscando, ya que parece que phpMyAdmin ha cambiado el nombre de la configuración.

Para desactivar '' insertos extendidos en una exportación de phpMyAdmin, es necesario establecer el "Sintaxis de utilizar al insertar los datos de configuración a la primera opción:

include column names in every INSERT statement 
Example: INSERT INTO tbl_name (col_A,col_B,col_C) VALUES (1,2,3) 
Cuestiones relacionadas