Obtenez un indicateur de progression lors de l'importation de bases de données MySQL

21

J'importe souvent des bases de données MySQL, et cela peut prendre un certain temps. Il n'y a aucun indicateur de progrès. Peut-on être montré, en quelque sorte? Soit des enregistrements importés, des Mo importés ou des tables importées ... tout vaut mieux que d'attendre. Quelqu'un a une idée?

J'utilise cette commande:

mysql -uuser -p -hhost database < largefile.sql

Les fichiers font entre 40 et 300 Mo et l'hôte se trouve sur le réseau local.

Réintégrer Monica
la source
@sr_ Je pense que pvc'est exactement ce que l'interrogateur recherche. Je viens de l'installer sur CentOS via rpmforge. Si le paramètre de taille est donné, il affichera même un ETA.
Nils
pva fait l'affaire en effet! Si quelqu'un peut en faire une réponse, je peux l'accepter!
Rétablir Monica le

Réponses:

31

Il y a un bel outil appelé pv

# On Ubuntu/Debian system
$ sudo apt-get install pv

# On Redhat/CentOS
$ sudo yum install pv

alors par exemple vous pouvez l'utiliser comme ceci

$ zcat dbpackfile.sql.gz | pv -cN zcat | mysql -uuser -ppass dbname

Veuillez vérifier UPDATE 2 pour ma dernière version

ps: consultez ce blog http://blog.larsstrand.org/2011/12/tip-pipe-viewer.html

MISE À JOUR: il semble que le lien ci-dessus soit rompu mais j'ai trouvé le même article ici http://blog.larsstrand.no/2011/12/tip-pipe-viewer.html

MISE À JOUR 2: encore meilleure solution avec la barre de progression FULL. Pour ce faire, vous devez utiliser 2 pvoptions de build . La première consiste --progressà indiquer la barre de progression et la seconde --sizeà indiquer pvla taille du fichier global.

pv --progress --size UNPACKED-FILE-SIZE-IN-BYTES

..le problème vient de .gzla taille du fichier d'origine. Vous devez en quelque sorte obtenir des informations sur la taille du fichier d'origine sans le décompresser, sinon vous perdrez un temps précieux pour décompresser ce fichier deux fois (la première fois pvet la deuxième fois pour zcat). Mais heureusement, vous avez une gzip -loption qui contient des informations non compressées sur notre fichier gziped. Malheureusement, vous l'avez sous forme de tableau, vous devez donc l'extraire avant de pouvoir l'utiliser. Tous ensemble peuvent être vus ci-dessous:

gzip -l /path/to/our/database.sql.gz | sed -n 2p | awk '{print $2}'

Uff .. donc la dernière chose que vous devez faire est simplement de combiner tous ensemble.

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` | mysql -uuser -ppass dbname

Pour le rendre encore plus agréable, vous pouvez ajouter des programmes NAME comme celui-ci

zcat /path/to/our/database.sql.gz | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass dbname

Résultat final:

Importing.. : [===========================================>] 100%

MISE À JOUR 3: Pour une utilisation rapide, créez une fonction personnalisée.

mysql_import() {
  zcat $2 | pv --progress --size `gzip -l %s | sed -n 2p | awk '{print $2}'` --name '  Importing.. ' | mysql -uuser -ppass $1
}

usage:

mysql_import dbname /path/to/our/database.sql.gz

Si vous ne savez pas où le mettre, lisez cette réponse: /unix//a/106606/20056

Vous pouvez ajouter des fonctions parmi les alias. Vous pouvez donc utiliser par exemple un ~/.bash_aliasesfichier.

sobi3ch
la source
C'est génial.
dave
1
Un doublure avec un meilleur résultat est celle-ci:pv --progress --name 'DB Import in progress' -tea /path/to/our/database.sql.gz | zcat | mysql -h db_host -u db_user -pdb_password db_name
Denis Pitzalis
16

Pourquoi si compliqué?

Cela fonctionne bien:

pv dump.sql.gz | zcat | mysql -u user -ppasswd database
Vincent
la source
Beaucoup plus simple et plus propre!
donquixote le
7

J'importe toujours des bases de données à partir du shell MySql. Il ne fournit pas d'indicateur de progression, mais il fait défiler (rapidement) les actions qu'il effectue, donc je sais que cela fonctionne.

# mysql -u user -p -h host database
> source /path/to/some/largefile.sql;
George M
la source