web-dev-qa-db-fra.com

Existe-t-il un moyen de montrer les progrès sur un `gunzip <database.sql.gz | mysql ... `processus?

Une fois par semaine, je dois exécuter une mise à jour géante de la base de données dans mon environnement de développement local comme ceci:

$ 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 &

J'essaie de les exécuter pendant la nuit car cela peut prendre plusieurs heures.

Pouvez-vous m'aider à trouver un moyen de montrer les progrès de ces tâches?

Voici quelques suppositions:

  1. Obtenez la taille de fichier non compressée de la base de données et comparez avec ma taille de base de données locale
  2. Courir show processlist dans mysql pour voir quelle table il insère actuellement (ma méthode actuelle, mais certaines tables sont énormes, et au moins un db de la mienne n'a qu'une seule table géante donc la majeure partie du processus est bloquée dans cette table, laissant cette option moins qu'utile)

Tous les fichiers db.sql.gz sont des mysqldumps gzip standard, donc je ne pense pas que je puisse construire quoi que ce soit dans les dumps pour me donner une mise à jour. (Mais je suis ouvert à ça si je manque quelque chose)


Règles de prime

Les réponses doivent:

  1. Fournissez des progrès utiles et raisonnablement précis (soit visuels comme scp (préféré!), Soit par le biais d'une simple table de base de données de progression facilement accessible).
  2. Ne pas interrompre l'exportation mysqldump régulière ou gunzip ... | mysql import (pour les autres ingénieurs qui ne peuvent pas utiliser ce que vous proposez)
  3. Ne pas donner à mon DBA une crise cardiaque - alors restez à l'aise sur les demandes de branche spéciales mysqldump ou alternatives mysql.
40
Ryan

Vous pouvez utiliser -v: mode verbeux (afficher la progression) dans votre commande, ou il existe une autre méthode utilisant Pipe Viewer (pv) qui montre la progression de la commande gzip, gunzip comme suit:

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

Cela produira une progression similaire à scp:

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

Vous pouvez également utiliser Pipe Viewer pour surveiller mysqldump:

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

Si vous n'avez pas déjà pv, vous pouvez l'installer avec:

yum install pv

ou avec macports

Sudo port install pv
109
Ali

Je pense que je voudrais effectuer une suppression de base de données avant de charger les données, et après cela, je pourrais exécuter un "du -sh" continu dans le répertoire des bases de données. Si je connais la taille du répertoire de la base de données d'origine (pourquoi pas?), Je peux l'utiliser comme moniteur de progression. Les db sont-ils largables?

2
banyek