Forum Programmation.shell Pipe et gros fichier

Posté par  .
Étiquettes : aucune
0
31
mar.
2009
Bonjour à tous,

je suis en train de buter sur une procédure de restauration.
J'ai un gros fichier qui est la sauvegarde d'une base SQL. Lors de mes tests, j'utilise un petit fichier, tout marche bien. Lorsque j'utilise le vrai fichier, la connexion ssh se ferme au bout de quelques secondes sans core dump ni rien. Ough !

Les détails:
Avant d'injecter le fichier, je dois le faire précéder de quelques commandes. Une fois l'injection terminée, j'ajoute d'autres commandes. Ces commandes sont dans pre.sql et post.sql.
Je procède comme ceci:


echo "$(< pre.sql)" "$(bzip2 --decompress --keep --stdout mysql.bz2)" "$(< post.sql)" | mysql --user=utilisateur --password --database=mabase


Pour isoler le problème, je fais:

echo "$(< pre.sql)" "$(bzip2 --decompress --keep --stdout sauvegarde_mysql.bz2)" "$(< post.sql)" > toto.sql

Pas mieux, ça ferme la connexion ssh au bout de quelques secondes et je n'ai pas trace du fichier toto.sql

note: je ne souhaite pas décompresser le fichier sauvegarde_mysql.bz2 avant l'opération car ça prend vraiment beaucoup de place et de temps.

Question 1: pourquoi tant de 'N' ?
Question 2: comment puis-je faire pour envoyer mes 3 fichiers via un pipe si l'un d'eux est très gros ?

Je vois une autre solution avec un fifo au lieu d'un pipe, mais ça ne résout pas mon problème car je dois envoyer 3 fichiers dans le fifo sans le fermer, je sais le faire uniquement avec echo comme ci-dessus.

Question 3: avec un fifo, comment envoyer plusieurs fichiers dedans sans qu'il se ferme à la fin du premier ?

Question 4: une solution plus élégante ?
  • # Pipe et gros fichier --> le soushsell

    Posté par  . Évalué à 6.

    Bonjour,

    Une solution pour toi est d'utiliser un sous shell :

    (
    cat pre.sql
    bzip2 --decompress --keep --stdout mysql.bz2
    cat post.sql
    ) | mysql --user=utilisateur --password --database=mabase


    Ceci va chainer tes commandes et envoyer les sorties standard vers ta commande mysql
    c'est la solution que j'utilise pour générer mes mails

    Cordialement
  • # C'est bel et bien la taille qui compte :-)

    Posté par  . Évalué à 6.

    Ton shell plante car ton echo se retrouve avec une énorme ligne de commande. Si tu décomposes ta ligne tu as:
    echo "contenu1xxxxxxxx" "contenu2xxxxxxxx" "contenu3xxxxxx"
    Comme ton contenu2 est très gros, ta ligne de commande dépasse la limite et zou, plantage.

    Moralité: il est impossible d'utiliser cette manière de faire dans ton cas.
    • [^] # Re: C'est bel et bien la taille qui compte :-)

      Posté par  . Évalué à 3.

      Pour une fois tu as été grillé :)

      Tout s'éclaire. Merci pour l'info. Je ne voyais pas de raison valable au plantage. Maintenant si.

      Avec la réponse de podoc je suis sorti d'affaire.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.