Importación lenta de la base de datos MySQL con mysqldump y USE .. FUENTE

8

Tengo alrededor de 12 tablas en MySQL innoDB, una de ellas tiene 11 millones de registros.

Usé este comando para hacer una copia de seguridad de las cosas:

mysqldump -u [USERNAME] -p [DBNAME] | gzip > [/path_to_file/DBNAME].sql.gz

Y este comando para importar cosas en el nuevo servidor:

USE [DBNAME];
SOURCE [/path_to_file/DBNAME].sql;

Aquí está el dolor con el que estoy afligido (¡el tiempo pasa con cada consulta!):

ingrese la descripción de la imagen aquí

¿Qué puedo hacer para acelerar las cosas? ¿Hay algún problema con mi comando mysqldump?

Kirk Ouimet
fuente

Respuestas:

5

Para su comando de volcado , puede usar lo siguiente

mysqldump --single-transaction --extended-insert -u [USERNAME] -p [DBNAME] | gzip > [/path_to_file/DBNAME].sql.gz

Los insertos extendidos son mejores.

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction La opción Single Transaction es mejor para descargar tablas InnoDB.

En su archivo my.cnf , realice los siguientes cambios temporalmente

http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_doublewrite

innodb_doublewrite = 0

y también

http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit

innodb_flush_log_at_trx_commit = 2

Reinicie MySQL y luego elimine estas opciones después de su importación y reinicie MySQL nuevamente.

Tablas de memoria

Si la base de datos completa puede caber en la memoria, puede cambiar ENGINE = InnoDB a ENGINE = MEMORY en su archivo sql de volcado para cada tabla o solo las tablas que tardan más en importarse, vuelva a importar el archivo de volcado a su base de datos y luego cambie el motor nuevamente a innodb.

ALTER TABLE name_of_table ENGINE = InnoDB;

comando mysqlimport

http://linux.die.net/man/1/mysqlimport

He usado mysqlimport para importar datos respaldados usando la opción de formato de tabulación en mysqldump. Ha demostrado ser más rápido que importar a través del comando mysql.

Volcar la base de datos usando mysqldump

mysqldump --tab = / some_directory / -u [USERNAME] -p [DBNAME] [TABLENAME]

Importe los datos a su base de datos.

mysqlimport -u [USERNAME] -p [DBNAME] /some_directory/tablename.sql

Craig Efrein
fuente
5

La carga masiva de InnoDB puede ser muy desalentadora si no tiene InnoDB sintonizado correctamente.

Estas son las configuraciones con las que debe preocuparse:

Se puede usar hasta la mitad de la agrupación de almacenamiento intermedio para inserciones en masa. Esto elimina los datos en caché. Durante la recarga de un mysqldump en las tablas de InnoDB, el Buffer Pool se convierte en una zona de guerra abierta entre los datos de InnoDB recién cargados y los cambios en los índices secundarios. A la luz de esto, aumenta innodb_buffer_pool_sizey innodb_log_file_sizees vital e imperativo.

Además, asegúrese de que estén activados. Un mysqldump debe tener estas variables establecidas en 0.

UNIQUE_CHECKS=0;
FOREIGN_KEY_CHECKS=0;

Puede verificar eso con un simple head -20en el archivo mysqldump.

Hay un aspecto más de importación: innodb_change_buffering

De acuerdo con la documentación de MySQL , puede dictar qué se almacena durante las operaciones de DML. Para obtener una aclaración completa sobre esto, consulte Control de InnoDB Change Buffering .

Recomiendo la siguiente configuración:

[mysqld]
innodb_buffer_pool_size=2G
innodb_log_file_size=512M
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=5000
innodb_thread_concurrency=0
RolandoMySQLDBA
fuente