Je veux compresser le vidage sql si et seulement si mysqldump ne produit aucune erreur. J'essaie de mettre le mauvais mot de passe, mais il exécute toujours le gzip.
mysqldump -u username -ppassword dbname |& if [ $? == 0 ]; then gzip > test.gz; else echo "error"; fi
Quel est le problème avec ma commande ou existe-t-il une meilleure solution ?
Réponse acceptée :
Je pense que vous pourriez supprimer |&
(la raison étant que vous n'avez pas besoin de diriger ni stdout ni stderr dans la condition suivante, vous pouvez simplement utiliser ';' comme séparateur de commande). Quelque chose comme ça devrait probablement fonctionner :
#!/bin/bash
mysqldump -u myuser -p mypasswd > mydb.dump
if [[ $? -eq 0 ]]; then
gzip mydb.dump
else
echo >&2 "DB backup failed"
exit 1
fi
Edit :pour vérifier le succès du gzip, vous pouvez faire quelque chose comme ceci :
mysqldump -u myuser -p mypasswd | gzip > mydb.dump.gz && echo "success" || echo "failure"
Cependant, cela signalerait un succès même si mysqldump
a échoué, c'est-à-dire si la sauvegarde a échoué pour la plupart des raisons autres que le remplissage du disque par gzip.