[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 disque dur - Télécharger - Informations & Diagnostic
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