Quel methode à adopter avec une Bdd??

Fermé
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 - 8 janv. 2008 à 10:03
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 - 10 janv. 2008 à 10:08
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

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
8 janv. 2008 à 10:14
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.
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
8 janv. 2008 à 10:26
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 )
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
8 janv. 2008 à 10:39
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.
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
8 janv. 2008 à 11:12
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é
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
8 janv. 2008 à 11:46
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
8 janv. 2008 à 11:55
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))
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
8 janv. 2008 à 12:04
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 ?
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
8 janv. 2008 à 12:07
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.
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
8 janv. 2008 à 12:07
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;
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
8 janv. 2008 à 12:08
A ouet pas mal j'avais pas pensé a sa je vais tester
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
8 janv. 2008 à 12:09
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)
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
8 janv. 2008 à 14:10
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
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
8 janv. 2008 à 15:30
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 ??
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
8 janv. 2008 à 16:14
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 ?
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
8 janv. 2008 à 17:45
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
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
9 janv. 2008 à 09:22
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
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
9 janv. 2008 à 09:28
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
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
9 janv. 2008 à 10:45
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 .
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
9 janv. 2008 à 10:58
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.
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
10 janv. 2008 à 09:38
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 ???
0