2012-05-25 13 views
10

En mi empresa ocasionalmente importamos grandes bases de datos MySQL de clientes (40GB +) que pueden tomar más de un día para cargar en nuestras máquinas de desarrollo. Si bien aceptamos este tiempo de carga ya que se realiza en segundo plano, carecemos de una capacidad sólida para estimar cuándo finalizarán las importaciones. Esto nos impide programar un momento apropiado para actuar en consecuencia. Es como esperar a que aparezca el tipo de cable.¿Qué tan avanzado está la importación de mi volcado de MySQL?

Ahora mi mejor estrategia es un comando rápido show tables para ver qué porcentaje de las tablas se han cargado. Sin embargo, dado que los tamaños de las mesas varían mucho entre ellos y con cada cliente, esto ni siquiera es confiable.

¿Alguien tiene una buena técnica o herramienta que se puede utilizar para obtener un porcentaje confiable de cuán lejos está una importación de MySQL?

Respuesta

15

Puede hacerlo con el comando pv conectando el volcado a mysql.

pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAME 

Le mostrará una barra de progreso durante el progreso de importación basado en el rendimiento de IO. (Como se ve here.)

+3

SÍ! ¡Perfecto! ¡Esto es exactamente lo que estaba buscando! Palabra de advertencia para los usuarios de Windows que tropiezan aquí: Cygwin no tiene un módulo para 'pv' en el instalador de la GUI, así que utilicé las instrucciones que se encuentran aquí: http://stackoverflow.com/q/504204 – Technetium

1

HeidiSql le dirá cuántos GB se han cargado hasta el momento, lo cual es bastante útil cuando se trata de calcular cuánto se necesita cargar.

1

También puede hacer un show processlist en la base de datos de origen para ver qué tan lejos (mediante auto incremento de ID) en una tabla específica es la exportación. Eric hace un buen punto ya que puede controlar el tamaño del directorio de datos de la base de datos en comparación con el tamaño de la fuente.

Algo que he encontrado útil en la aceleración de volcados/importaciones, es hacerlo por tablas y luego ejecutar múltiples mysqldumps al mismo tiempo esencialmente multi-threading su proceso. Usualmente hacía aproximadamente 4 volcados/restauraciones separadas a la vez. La cantidad óptima dependerá de su hardware y capacidades de disco.

Un ejemplo muy simplista para darle una idea:

mysqldump dbname table1 table2 table3 | mysql -h host & 
mysqldump dbname table4 table5 table6 | mysql -h host & 
mysqldump dbname table7 table8 table9 | mysql -h host & 
+0

This multi el enfoque con hebras es intrigante. ¿Aproximadamente qué tan grandes son las reducciones en el tiempo total de importación? Pensé que la unidad ya estaba enlazada con E/S (no están funcionando en SSD), así que nunca consideré esto como una opción. – Technetium

+1

Depende de su disco. MySQL solo usará un único proceso, por lo que si tiene múltiples procesadores, puede usar más núcleos de esta manera. Ejecute la parte superior y vea si el subproceso mysql tiene su CPU al 100%. Entonces lo más probable es que esté vinculado a la CPU. Tomará algo de experimentación para encontrar su punto óptimo, pero podría adivinar que el proceso 2 será aproximadamente la mitad de su tiempo. – sreimer

Cuestiones relacionadas