2011-05-23 13 views
10

Tengo un volcado de base de datos MYSQL de 8GB de tablas InnoDB creadas con mysqldump. Importe los datos con:La importación de 8GB de volcado mysql lleva mucho tiempo

mysql -uroot -p my_db < dump.sql 

Se importó un volcado de 5 GB de la base de datos en una hora. El volcado de 8 GB demora 50 horas y cuenta. Cuando inspeccioné la lista de proceso con

MOSTRAR LISTA DE PROCESOS;

La mayoría de las veces no era una sola consulta INSERT visible con el estado "" partidas" liberando

¿Hay alguna manera, además de la copia de los archivos en bruto, para acelerar el proceso de importación?

Respuesta

11

El truco realmente es asegurarse de que la tabla más grande se ajuste a la agrupación de buffer innodb. Si no lo hace, entonces las inserciones (e importación, por supuesto) serán extremadamente lentas.

No importa el tamaño de toda la base de datos, sino la tabla más grande.

Para bases de datos significativamente más grandes, es posible que desee considerar métodos alternativos de transferencia de la base de datos, como instantáneas del sistema de archivos. Por supuesto, esto funciona mejor si sus máquinas están ejecutando la misma versión de la base de datos, el sistema operativo y la arquitectura.

+0

[Algunas lecturas muy útiles sobre ese tema] (http://dba.stackexchange.com/a/27341/94577) –

6

¿Cuánta memoria tiene la máquina? Mi primera suposición es que la máquina tiene 6 gb u 8 gb de memoria, y mysql fue capaz de mantener el primer volcado completamente en memoria, pero de alguna manera está intercambiando núcleo duro en la segunda importación. ¿Puede ejecutar un vmstat 5 durante algunas iteraciones mientras realiza la importación y ver qué tan pesado está el sistema intercambiando?

+0

Tiene 8GB. Volveré a ejecutar la importación e informaré los números de vmstat una vez que la memoria disponible se convierta en un susto. –

+0

Lo único que se me ocurre es desactivar los índices en el volcado y luego agregarlos después de que los datos estén en la tabla. De la documentación de mysqldump: http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html --disable-keys, -K Para cada tabla, rodee las instrucciones INSERT con/*! 40000 ALTER TABLE tbl_name DISABLE KEYS * /; y/*! 40000 ALTER TABLE tbl_name ENABLE KEYS * /; declaraciones. Esto hace que cargar el archivo de volcado sea más rápido porque los índices se crean después de insertar todas las filas. Esta opción solo es efectiva para índices no únicos de tablas MyISAM. – opsguy

+0

Todas las tablas son InnoDb –

Cuestiones relacionadas