couldn column_name mysql mysqldump

column_name - Cómo lidiar con enormes longitudes de línea creadas por mysqldump



mysqldump version mismatch (6)

De forma predeterminada, mysqldump genera solo un comando INSERT por tabla , lo que da como resultado una línea (muy larga) de datos insertados para cada tabla que se volcó. Esto se debe esencialmente a que las inserciones de "lote" son mucho más rápidas que si generara una consulta INSERT separada para cada registro en cada tabla.

Entonces, no es que mysqldump haya creado líneas arbitrariamente largas, y usted puede simplemente imponer otra longitud de corte. Las líneas son largas por una razón.

Si es realmente importante desglosar los INSERT en múltiples líneas, puede indicarlo con:

mysqldump --extended-insert=FALSE --complete-insert=TRUE ...

Sin embargo, tenga en cuenta que restaurar tablas llevará más tiempo en este formato.

Estoy usando mysqldump en un trabajo cron para hacer una copia de seguridad de una base de datos con más de 2 millones de filas.

Crea un archivo de texto que se puede usar para restaurar el registro de datos desde la línea de comando.

Pensé que sería útil editar el volcado antes de una restauración como una forma rápida de cambiar los valores y los nombres de tabla o columna, al menos hasta que sepa más y tenga confianza en hacerlo con ALTER y UPDATE.

No me molesta editar archivos de texto grandes, pero me sorprendió descubrir que en un volcado de 250 megabytes de mi base de datos, solo había unas 300 líneas . Cada línea tenía algo así como 800k caracteres de largo.

¿Hay alguna otra forma de generar volcados con más control sobre la longitud de línea?

¿O debería post-procesar el volcado con herramientas como sed o Perl?


Encontré una respuesta en los foros de MySQL, que concluyentemente agrega ''/ n'' después de que cada grupo INSERT no es posible usando mysqldump solo, sin modificar la fuente:

El formato extendido no se puede analizar correctamente al 100% en función de la coma o el paréntesis, se deben contar los campos. La mejor solución, arregle mysqldump para linebreak en la salida.

Cambio muy leve: en la línea 3506, puede ver dónde se genera la coma final de fila:
fputc('','',md_result_file); /* Always row break */

Simplemente inserte esta línea inmediatamente después de la línea 3506:
fputc(''/n'',md_result_file); /* Lon Binder says wrap that line! */

volver a compilar y listo.

@see http://forums.mysql.com/read.php?28,420002,426110#msg-426110

Gracias Lon B!

(He incluido el contenido del foro de MySQL solo en caso de que el foro desaparezca).


Esta bandera también se trabajó:

mysqldump --skip-extended-insert

Lo mismo que --extended-insert=FALSE .


Estaba navegando por el código fuente de MySQL buscando una solución a este problema hoy. La longitud de línea máxima es impuesta por la variable opt_net_buffer_length que se supone que coincide con el tamaño del búfer del servidor MySQL. Es cómicamente grande.

Pero de todos modos, es una opción, así que haz esto:

mysqldump --net_buffer_length=5000 ...

El valor mínimo es 4096.


Postprocesa el archivo de volcado con python . Puede ser más feliz que Perl o Sed.

Si está ejecutando en Linux, ya lo tiene instalado. Si está ejecutando en Windows, el instalador es sencillo.

Antes de eso, sin embargo, aprender a utilizar SQL ACTUALIZAR y SQL ALTER. Serás más feliz haciendo las cosas bien.