Quel methode à adopter avec une Bdd??

[Fermé]
Signaler
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
-
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
-
Bonjour,
voici mon shema : https://winlinx.files.wordpress.com/2008/01/projet-greg-enst.jpg

Le servuer http a une base de donnée type mysql. Les 4 serveur sont doivent rapporté des information de types quota d'impression , disque, mail et les nom d'utilisateur via ldap .

Ma question comment faire pour ma base de donnée crée au paravant se remplice et se mette a jour ( par exemple mise a jour tous les 8h00)

Personnellement je pense que je doit mettre un script a chaque serveur qui lui les remettra avec des requete directement sur dans ma base , mais la je vous dirais je ne sais pas ??? Si quelqu'un a une idée merci d'avance

21 réponses

Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
Je suis surfcontrolé et ne peut pas voir ton image, mais j'imagine que tu as un serveur "central" sur lequel la base de données tourne, et les 4 autres serveurs qui lui envoi des infos.

Pour mettre à jour régulièrement la base de donnée, il faudrait donc que tu développe un petit script (dans le language qui va le mieux par rapport à la manipulation de tes données) qui mette à jour ces informations dans la base de données.
Ensuite pour ce qui est de lancer régulièrement ce script, je ne sais pas sous quel OS tourne ton serveur principal, mais tu peux définir ton script comme un tache cron qui s'éxécute toutes les X heures.
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
Pour ta deduction du shema oui c'est sa :)

Jusqu'a la je suis d'accord avec toi , pour mes scripts

il faudrait donc que tu développe un petit script


oui , mais il faut que j'en crée un sur chaque serveur ??

je ne sais pas sous quel OS tourne ton serveur principal


Je suis sous nunux ( linux )


Pour le language j'ai le choix entre Python, php, perl d'apres toi la meilleur solution pour un mega novice ( et oui mon domaine est le réseau )
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
Et bien pour ce qui est de un script ou plusieurs, ca dépend d'une chose, est ce que tes autres serveurs envoi quotidiennement des fichiers sur ton serveur principal ? (fichiers ressenscant les informations à mettre à jour)

Si oui alors il te suffit de développer qu'un script sur ton serveur principal, script utilisant ces fichiers d'informations pour mettre à jour la base.
Si non, et bien tu peux toujours dév un script générique que tu lance sur chaque serveur... mais le mieux (et je suis sur que tu sera d'accord sur ce point si tu es plutot accé réseau :) ), c'est que tes serveurs secondaires envoi les infos sur le serveur principal, et qu'il n'y ai que ton serveur principal qui fasse les acces base de données (plus sécurisé, moins de traffic réseau et bdd).

Pour ce qui est du language dans lequel développer ton script, j'ai fais un peu de perl il y a un moment, c'est pas mal. Le python est très bien aussi il me semble (jamais fait).
En php c'est sur que c'est faisable (connait tres bien), donc pour les deux autres languages je dirais qu'il faut l'avis d'une personnes plus aisée dans ce milieu. (sebsauvage (http://www.commentcamarche.net/communaute/profil sebsauvage) me semble être la bonne personne si tu veux le joindre ;) )

Ha oui, le language du script dépends aussi de la facon dont tu vas organiser les informations envoyées par les autres serveurs.
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
deja merci pour le temps que tu ma consacré

Mon serveur principal ( http) ne recoit rien il me sert seulement de "passerelle" entre les serveur secondaire et l'utilisateur final, il recevra des donnée avec mes script .

Donc la solution a garder est la deuxieme soit un script sur chaque serveur.

Ma base de donnée du serveur pricipal contient seulement une table ( a quoi sa sert alors ? c'est pour une soucis d'évolution) , elle est come ceci :

Table utilisateur : (francisé)
nom user
pwd user
quota max dique
quota utilisé disque
quota max mail
quota utilisé mail
Nb d'imbression max
Nb d'impression utilisé
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
Ce script me semble pas mal en effet, si tes données sont dans un fichier texte c'est nickel, ca permet de lire et d'enregistrer dans la base de données à la volée. Et tu peux le prendre tel quel ca devrait fonctionner (en remplacer bien sur le chemin du fichier texte à parser, ainsi que les paramètres de connexion à la base de données (url, user, pwd, basename))
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
J'ai regarder pour mes quota il n'y a pas ( je n'en suis pas sur a 100%) de fichier mais je sais qu'il a une commande edquota -u user

donc je pense que je peut remplacer la ligne
open FICHIER,"< monfichier.log"
    or die "Le fichier n'existe pas ! : $!\n";


par

system(edquota -u)
or die "La commande n'existe pas ! : $!\n";

qu'en penses tu ?
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
Mum, aucune idée, mais ce que tu peux faire c'est un batch qui fais :

- la commande : edquota -u user > mon_fichier.txt
- exécution de ton script

Et ton script va lire le fichier 'mon_fichier.txt'

Ca me semble être un bon contournement si jamais ce que tu propose ne fonctionne pas.
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
soit :

#!/usr/bin/perl -w
use strict;
use DBI;
use CGI;

my $cgi = new CGI;
my ($block,$soft);

print "Content-type: text/html\n\n";

system(edquota -u)
    or die "Le fichier n'existe pas ! : $!\n";

#Connection à la base de données mysql 
my $db = DBI -> connect (("dbi:mysql:dbname=penst;host=localhost;","root","******"
))
                or die "connection impossible!";

while ($ligne = <FICHIER>){
# récupération des éléments
 ($block,$soft) = split /;/,$ligne;
# et on insere dans la base
  $db->do("insert into utilisateurenst values ('$block', '$soft')");
          or die "pb de requete : $DBI::errstr";
}# fin de traitement de fichier


exit;
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
A ouet pas mal j'avais pas pensé a sa je vais tester
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
Non non ca ne fonctionnera pas comme ca ^^, ou alors il faut faire une redirection sur un fichier texte dans ta commande, puisque ensuite ton script lit un fichier texte pour y prendre les infos.

Je pense qu'avec tout ca t'as de quoi t'en sortir (voir ma remarque précédente sur le scritp shell qui exécute la commande avec redirection, puis ton script)
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
oki je vais tester cela et faire une ptit reunion avec quelque personne pour voire si on est bien partie je te redit pour la suite et metterai mais script a disposition
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
je revien sur notre histoire de edquota -u user > mon_fichier.txt

Le truc c'est que les quota change constament donc il faudrait faire une boucle continu ??
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
Le quota change constament.

C'est une chose, mais tu veux enregistrer ces infos toutes les X heures non ?
Dans ce cas là puisque ton script shell est lancé comme un cron toutes les Xheures et que c'est lui qui lance la commande des quotats, ces quotats seront raffraichi dans ta base de données toutes les X heures.

Je pense que ca suffit amplement puisque tu n'as qu'une seule table, et que forcément tu ne gère pas tes quotats dans le temps mais uniquement à des instants précis (sinon la base de données devraient être plus étoffée en table)

Je ne me trompe pas ?
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
oui mais il faut donc que je crée un cron sur la commande edquota -u user > mon_fichier.txt pour qu'apres les informations lu par mon script ce mette a jour dans la base
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
Oui, soit tu fais un cron pour ta commande edquota, puis un autre cron pour ton script, soit tu fais un seul cron pour ton script, et ton script lance la commande edquota juste avant de s'effectuer.

La différence ? Avec la premiere tu peux raffraichir les quota plus souvent en donnant un temps plus petit (exécution toutes les deux minutes par exemple)
L'intérêt ? Personnellement je n'en vois aucun puisque ce que tu veux faire c'est actualiser les quota dans ta base. Conclusion même si tu lance plusieurs fois / heure ta commande edquota, les quota sauvegardés seront ceux qui ont été établi juste avant l'éxécution du script (les autres non). Donc à part si tu te sert ailleurs de ces quota, je ne vois pas l'intéret de séparer ta commande systeme de ton script de lecture / update.

Après libre à toi d'effectuer ce qui te semble le plus adapté à ta situation, j'ai peut etre mal compris le but :D
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
Salut , bon petite conclusion d'une reunion de hier soir :

- pas de fichier texte

Solution :

- travailler en memoire avec a la pace d'ouvrir un fichier on insert la commande edquota -u user en lui faisanr affiché se que l'on veut avec de grep par exemple.

comme cela :
`edquota -u user` .....

je vais voir des tuto sur ce type d'expression
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
Deplus pour la connexion j'ai trouvé un module que l'on appel dbd::mysql qui permet de se connecter a distance sur ma base de donnée .

Aujourdh'ui je commence a etre content lol .
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
852
Si tu veux utiliser grep c'est comme ceci :

edquota -u user | grep "^blabla$"


Ca te sélectionnera uniquement les lignes contenant "blabla" sur la sortie de ta premiere commande.
Je te laisse parcourrir le man de grep pour en savoir plus.
Bon courage.
Messages postés
343
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
16 août 2011
16
Bon retour , voici le debut du script

#!/usr/bin/perl -w
use strict;
use DBI;
use CGI;

my $cgi = new CGI;
my $recup = ` sed -e '1,/-\+/d;/^$/,$d' repquota -v/chemin` 
my ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2);

print "Content-type: text/html\n\n";

#Connection à la base de données mysql avec le module dbd::mysql (conncetion à distance)
$dbh = DBI->connect("DBI:mysql:database=$db;host=$host",
                      $user, $password, {RaiseError => 1});

#Requete sur la base de donnée 
my $query = sprintf("INSERT INTO foo VALUES (%d, %s)",
                      $number, $dbh->quote("name"));
  $dbh->do($query);

while ($ligne = $recup){
# récupération des éléments
 ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2) = split /;/,$ligne;
# et on insere dans la base
  $db->do("insert into client values ('$user1','$used1','$soft1','$hard1','$grace1','$used2','$soft2','$hard2','$grace2')");
          or die "pb de requete : $DBI::errstr";



Qu'en pense tu ???