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:
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:
scp
(préféré!), Soit par le biais d'une simple table de base de données de progression facilement accessible).mysqldump
régulière ou gunzip ... | mysql
import (pour les autres ingénieurs qui ne peuvent pas utiliser ce que vous proposez)mysqldump
ou alternatives mysql.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
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?