¿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:
- Obtenga el tamaño de archivo descomprimido de la base de datos y compárelo con mi tamaño de base de datos local
- 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:
- 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). - No romper la exportación regular de
mysqldump
ogunzip ... | mysql
regulargunzip ... | mysql
Importación degunzip ... | mysql
(para otros ingenieros que no pueden usar lo que sea que se te ocurra) - 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