Estoy restaurando una base de datos de 30 GB de un archivo mysqldump a una base de datos vacía en un nuevo servidor. Al ejecutar el SQL desde el archivo de volcado, la restauración comienza muy rápidamente y luego comienza a volverse más y más lenta. Las inserciones individuales ahora tardan más de 15 segundos. Las tablas son principalmente MyISAM con un pequeño InnoDB. El servidor no tiene otras conexiones activas. SHOW PROCESSLIST;
solo muestra la inserción de la restauración (y la lista de procesos de show en sí).
¿Alguien tiene alguna idea de lo que podría estar causando la dramática desaceleración?
¿Hay alguna variable MySQL que pueda cambiar para acelerar la restauración mientras progresa?
Respuestas:
Una cosa que puede estar ralentizando el proceso es key_buffer_size , que es el tamaño del búfer utilizado para los bloques de índice. Ajuste esto al menos al 30% de su RAM o el proceso de reindexación probablemente será demasiado lento.
Como referencia, si estaba usando InnoDB y claves externas, también podría deshabilitar las comprobaciones de claves externas y volver a habilitarlas al final (usando
SET FOREIGN_KEY_CHECKS=0
ySET FOREIGN_KEY_CHECKS=1
).fuente
Este enlace muestra lo que se puede hacer para acelerar el proceso de restauración.
http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html
Uno puede poner los comandos en la parte superior del archivo de volcado
Y ponga estas declaraciones al final del archivo de volcado
Esto funcionó para mí. Feliz restauración :-)
fuente
cat pre.sql dump.sql post.sql | mysql ...
La única razón por la que puedo imaginar por qué la restauración se ralentizaría gradualmente es la indexación. Investigue apagar la indexación hasta el final y luego deje que haga todo el lote de una vez.
fuente
Si tiene la copia física del archivo de volcado (el directorio DB), puede copiarla en el nuevo servidor si el nuevo servidor tiene la misma versión de MySQL y funcionará bien. Esto funciona bien con MyISAM y para mí creo que es mejor que restaurar los datos basados en el archivo lógico de volcado de SQL.
fuente
Si tiene varias tablas, es probable que se beneficie de mk-parallel-restore .
fuente
Esto lo hara:
mysql --init-command = "SET SESSION FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;" -u root -p <Backup_Database.mysql
fuente
Te sugerí
AUTOCOMMIT=0
,UNIQUE_CHECKS=0
,FOREIGN_KEY_CHECKS=0
( Y NO OLVIDE ROLLBACK esto cambia )mysql -u root -pPasss requests < mydb.sql
Buena suerte
fuente