[Bash] Tester l'existence d'une base MySQL

Résolu/Fermé
Doezer Messages postés 255 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 11 août 2014 - 28 nov. 2011 à 16:47
Doezer Messages postés 255 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 11 août 2014 - 29 nov. 2011 à 16:54
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 :
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:

1 réponse

Doezer Messages postés 255 Date d'inscription mercredi 14 avril 2010 Statut Membre Dernière intervention 11 août 2014 112
29 nov. 2011 à 16:54
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 :
#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
2