mysql sql progress sql-insert gunzip

¿Hay alguna manera de mostrar el progreso en un `gunzip<database.sql.gz | mysql... `proceso?



progress sql-insert (2)

Una vez a la semana, necesito ejecutar una actualización gigante de la base de datos en mi entorno de desarrollo local así:

$ gunzip < /path/to/database1.sql.gz | mysql -uUSER -p database1 & $ gunzip < /path/to/database2.sql.gz | mysql -uUSER -p database2 & $ gunzip < /path/to/database3.sql.gz | mysql -uUSER -p database3 &

Intento ejecutarlos de la noche a la mañana ya que puede llevar varias horas completarlos.

¿Pueden ayudarme a encontrar una manera de mostrar el progreso en estas tareas?

Aquí hay algunas conjeturas:

  1. Obtenga el tamaño de archivo descomprimido de la base de datos y compárelo con mi tamaño de base de datos local
  2. Ejecute show processlist en mysql para ver qué tabla está insertando actualmente (mi método actual, pero algunas tablas son enormes, y al menos una base de datos única tiene una tabla gigante, por lo que la mayor parte del proceso está atrapada en esta tabla, dejando esta opción menos que útil)

Todos los archivos db.sql.gz son mysqldumps gzip estándar, por lo que no creo que pueda generar nada en los volcados para darme una actualización. (Pero estoy abierto a eso si me falta algo)

Reglas de Bounty

Las respuestas deben:

  1. Proporcione un progreso útil y razonablemente preciso (ya sea visual como scp (¡preferido!) O a través de una tabla de base de datos de progreso simple a la que se pueda acceder fácilmente).
  2. No romper la exportación regular de mysqldump o gunzip ... | mysql regular gunzip ... | mysql Importación de gunzip ... | mysql (para otros ingenieros que no pueden usar lo que sea que se te ocurra)
  3. No le dé un ataque al corazón a mi DBA, así que manténgase tranquilo con mysqldump especiales o solicitudes alternativas de sucursal de mysql.

Creo que realizaría una base de datos de inserción antes de cargar los datos, y después de que sucediera podría ejecutar un "du -sh" continuo en el directorio de las bases de datos. Si conozco el tamaño del directorio de la base de datos original (¿Por qué no podría?), Entonces puedo usarlo como monitor de progreso. ¿Los db''s son droppable?


Puedes usar -v: modo detallado (mostrar progreso) en tu comando, o hay otro método que usa Pipe Viewer ( pv ) que muestra el progreso del comando gzip, gunzip de la siguiente manera:

$ pv database1.sql.gz | gunzip | mysql -u root -p database1

Esto generará un progreso similar al de scp:

$ pv database1.sql.gz | gunzip | mysql -uroot -p database1 593MiB 1:00:33 [ 225kiB/s] [====================> ] 58% ETA 0:42:25

También puede usar Pipe Viewer para monitorear mysqldump:

mysqldump -uroot -p database1 | pv | gzip -9 > database1.sql.gz

Si aún no tiene pv , puede instalarlo con:

yum install pv

o con macports

sudo port install pv