[Bash] Tester l'existence d'une base MySQL
Résolu
Doezer
Messages postés
289
Statut
Membre
-
Doezer Messages postés 289 Statut Membre -
Doezer Messages postés 289 Statut Membre -
Bonjour,
J'aimerais pouvoir tester l'existence d'une base tout d'abord, pour ensuite décider de la créer ou non. J'ai fait ça :
Quand la bd n'existe pas, il écrit bien dans le fichier.
Mais quand elle existe déjà, il écrit aussi dans le fichier !
Deuxième partie, pour tester l'existence d'une table cette fois. J'ai déjà ceci :
Ici, bien que la tables n'existe pas, il n'écrit pas non plus dans le fichier.
Et enfin 3ème partie, pour tester si un champ est rempli ou non. J'ai fait ceci :
Ici, il me fait tout le temps un update, même quand les tables n'existent pas.
Existe-t-il une façon plus simple de tester l'existence de ces éléments ?
Sinon, y'a t-il un moyen de rendre ce script fonctionnel ?
Merci de votre aide.
PS : En tant que tel, je sais que les commande ne crée pas de SQL, mais j'ai besoin d'exporter les données dans un fichier pour les besoins du script.
J'aimerais pouvoir tester l'existence d'une base tout d'abord, pour ensuite décider de la créer ou non. J'ai fait ça :
if [[ 'mysql -uXXXXX -pXXXX -e "USE log;"' != 0 ]];then echo "CREATE DATABASE log;" >> /tmp/stats.sql fi
Quand la bd n'existe pas, il écrit bien dans le fichier.
Mais quand elle existe déjà, il écrit aussi dans le fichier !
Deuxième partie, pour tester l'existence d'une table cette fois. J'ai déjà ceci :
if [[ 'mysql -uXXXX -pXXXXX -e "SELECT * FROM log.connexions_groupes_${annee}_${mois};"' != 0 ]];then
echo "CREATE TABLE log.connexions_groupes_${annee}_${mois} (Id AUTO_INCREMENT, GroupID INTEGER, GroupName VARCHAR(30), Connections INTEGER);" >> /tmp/stats.sql
fi
Ici, bien que la tables n'existe pas, il n'écrit pas non plus dans le fichier.
Et enfin 3ème partie, pour tester si un champ est rempli ou non. J'ai fait ceci :
if [[ 'mysql -uXXXX -pXXXXX -e "SELECT Connexions FROM log.connexions_groupes_${annee}_${mois} WHERE GroupID=${groupiddata[${COUNTER}]};"' := 0 ]];then
#Si le champ n'a pas encore été rempli (première fois sur le mois que le script est lancé) on insère les données
echo "INSERT INTO connexions_groupes_${annee}_${mois} (GroupID,GroupName,Connections) VALUES(${groupiddata[${COUNTER}]},'${groupnamedata[${COUNTER}]}',$nbconnec)" >> /tmp/stats.sql
else
#si le champ est déjà rempli on modifie les données
echo "UPDATE connexions_groupes_${annee}_${mois} SET Connections=$nbconnec WHERE GroupID = ${groupiddata[${COUNTER}]};" >> /tmp/stats.sql
fi
Ici, il me fait tout le temps un update, même quand les tables n'existent pas.
Existe-t-il une façon plus simple de tester l'existence de ces éléments ?
Sinon, y'a t-il un moyen de rendre ce script fonctionnel ?
Merci de votre aide.
PS : En tant que tel, je sais que les commande ne crée pas de SQL, mais j'ai besoin d'exporter les données dans un fichier pour les besoins du script.
A voir également:
- [Bash] Tester l'existence d'une base MySQL
- Flash drive tester - Télécharger - Divers Utilitaires
- Tester son pc - Guide
- Base de registre - Guide
- Tester composant pc - Guide
- Tester compatibilité windows 11 - Guide
1 réponse
Problème résolu, je met les solutions.
Pour la base et les tables, j'ai fini par rediriger les erreurs dans un fichier temporaire que je compare ensuite à l'erreur qui doit ressortir si l'élément n'existe pas.
Base :
Table :
Pour vérifier si un champ est rempli, c'est la sortie que j'ai redirigée cette fois-ci :
Pour la base et les tables, j'ai fini par rediriger les erreurs dans un fichier temporaire que je compare ensuite à l'erreur qui doit ressortir si l'élément n'existe pas.
Base :
#On crée la base si elle n'existe pas
if [[ 'mysql -uXXXXX -pXXXX -e "USE ${db};" 2> /tmp/error.logextract ; cat /tmp/error.logextract' = "ERROR 1049 (42000) at line 1: Unknown database '${db}'" ]];then
echo "CREATE DATABASE ${db};" >> /tmp/stats.sql
fii
Table :
if [[ 'mysql -uXXXX -pXXXXX -e "SELECT * FROM ${db}.connexions_groupes_${annee}_${mois};" 2> /tmp/error.logextract ; cat /tmp/error.logextract' = "ERROR 1146 (42S02) at line 1: Table '${db}.connexions_groupes_${annee}_${mois}' doesn't exist" ]];then
echo "CREATE TABLE connexions_groupes_2011_11 ( id INTEGER AUTO_INCREMENT, GroupID INTEGER, GroupName VARCHAR(30), Connections INTEGER, PRIMARY KEY (id));" >> /tmp/stats.sql
fi
Pour vérifier si un champ est rempli, c'est la sortie que j'ai redirigée cette fois-ci :
if [[ 'mysql -uXXXX -pXXXX -e "SELECT Connections FROM ${db}.connexions_groupes_${annee}_${mois} WHERE GroupID=${groupiddata[${COUNTER}]};" > /tmp/error.logextract ; cat /tmp/error.logextract' = "" ]];then
#Si le champ n'a pas encore été rempli (première fois sur le mois que le script est lancé) on insère les données
echo "INSERT INTO connexions_groupes_${annee}_${mois} (GroupID,GroupName,Connections) VALUES(${groupiddata[${COUNTER}]},'${groupnamedata[${COUNTER}]}',$nbconnec);" >> /tmp/stats.sql
else
#si le champ est déjà rempli on modifie les données
echo "UPDATE connexions_groupes_${annee}_${mois} SET Connections=$nbconnec WHERE GroupID = ${groupiddata[${COUNTER}]};" >> /tmp/stats.sql
fi