2008-11-12 20 views
5

¿Cuál es la manera más fácil de obtener los datos para una sola tabla, eliminar una sola tabla o dividir todo el archivo de volcado en archivos que contienen tablas individuales? Por lo general, termino haciendo mucho viging regex, pero apuesto a que hay formas más fáciles de hacer esto con awk/perl, etc. La primera página de los resultados de Google trae un montón de scripts Perl que no funcionan.Manipulación de gigantes archivos de volcado de MySQL

Respuesta

9

Ahórrese muchas molestias y use mysqldump -T si puede.

Desde el documentation:

--tab = ruta, -T ruta

archivos de datos separados por ficha Producir. Para cada tabla volcada, mysqldump crea un archivo tbl_name.sql que contiene la instrucción CREATE TABLE que crea la tabla, y un archivo tbl_name.txt que contiene sus datos . El valor de la opción es el directorio en el que escribir los archivos.

De forma predeterminada, los archivos de datos .txt se formatean con los caracteres de tabulación entre los valores de columna y una nueva línea al final de cada línea. El formato se puede especificar explícitamente utilizando las opciones --fields-xxx y --lines-ended-by.

Nota
Esta opción debe usarse solo cuando mysqldump se ejecuta en la misma máquina que el servidor mysqld. Debe tener el privilegio FILE, y el servidor debe tener permiso para escribir archivos en el directorio que especifique.

11

Cuando necesito extraer una sola tabla de un volcado sql, utilizo una combinación de grep, head y tail.

Ej:

grep -n "CREATE TABLE" dump.sql 

Esto entonces los números de línea para cada uno da, por lo que si la mesa está en la línea 200 y la siguiente está en la línea 269, que hago:

head -n 268 dump.sql > tophalf.sql 
tail -n 69 tophalf.sql > yourtable.sql 

Me imagino que podría extenderse sobre esos principios para derribar una secuencia de comandos que dividiría todo en un archivo por tabla.

¿Alguien quiere ir a hacerlo aquí?

Otro poco que podrían ayudar a iniciar un bucle de bash va:

grep -n "CREATE TABLE " dump.sql | tr ':`(' ' ' | awk '{print $1, $4}' 

Eso le da una buena lista de números de línea y los nombres de tabla como:

200 FooTable 
269 BarTable 
+0

La salida de la cabeza puede ser simplemente canaliza a la cola - esto no es una mala idea – deadprogrammer

+0

solución bastante interesante, pero Maatkit puede hacer lo mismo y aún más: D –

4

This shell script tomará las tablas que desee y las pasará al splitted.sql.

Es capaz de entender expresiones regulares ya que he agregado una opción sed -r.

También MyDumpSplitter puede dividir el volcado en volcados de tabla individuales.

0

Estoy un poco tarde en eso, pero si puede ayudar a alguien, tuve que dividir un gran archivo de volcado SQL para importar los datos a otro servidor Mysql. lo que terminé haciendo fue dividir el archivo de volcado usando el comando del sistema.

dividida -l 1000 import.sql splited_file

Lo anterior se dividirá el archivo sql cada 1000 líneas.

Espero que esto ayude a alguien

Cuestiones relacionadas