Tips : Configuration de serveurs #2
Suite à quelques demandes, notamment de @Ouark lors d’une soirée sur Paris, je vais essayer de publier régulièrement quelques petites astuces que j’ai trouvé et qui m’ont bien aidé/dépanné.
Voici donc la partie #2 des Tips concernant la configuration de serveurs et le développement.
Reset du pass root MySQL
Qui n’a jamais perdu son mot de passe root MySQL, ce mot de passe que l’on vous demande à l’installation et dont vous allez vous servir ponctuellement, préférant par sécurité utiliser des utilisateurs plus précis et associés à une BDD spécifique. Je ne suis surement pas le seul en tout cas ^^
Ne stockant jamais mes mots de passe (question de sécurité), le mot de passe root MySQL est celui que j’ai le plus souvent oublié, même si ca ne m’arrive pas toutes les semaine non plus. Voici donc une petite astuce pour le reset et en créer un nouveau sans devoir tout réinstaller.
1 – Arrêter votre serveur MySQL
La première chose à faire bien entendu, est d’arrêter MySQL, le tout en étant root sur la machine bien entendu (comme pour toutes les commandes qui suivront)
/etc/init.d/mysql stop
2 -MySQL en safe mode
Il faut maintenant lancer MySQL en safe mode avec l’option « –skip-grant-tables » pour ne pas prendre en compte la table des privilèges.
mysqld_safe --skip-grant-tables &
A noter aussi le « & » qui permet de lancer en background le serveur et ainsi continuer à modifier le pass root.
3 – Login
Maintenant on peut se loguer au serveur MySQL en root de manière « anonyme » ou plutôt sans avoir le soucis des privilèges
mysql --user=root mysql4 – Modifier le pass root
Une fois connecté, il suffit d’effectuer une requête pour mettre à jour le pass de la table user.
UPDATE USER SET Password=PASSWORD('mon_nouveau_pass') WHERE USER='root'; FLUSH PRIVILEGES;
5 – C’est repartit !
Maintenant, on arrête le safe mode puis on relance le serveur MySQL
/etc/init.d/mysql restart
Vous pouvez à nouveau vous connecter en root et gérer vos bases.
N.B: Cette manipulation à été testé sur Ubuntu, Debian et Slackware, et, même si le principe reste le même quelque soit la distribution, il peut varier un petit peu ;)
Nombre de visiteurs à partir des logs apache
Régulièrement, il m’arrive de vouloir connaitre le nombre de visiteurs unique qui sont passé la veille sur les sites hébergés sur mon serveur, le tout sans devoir consulter des outils de stats que je n’ai pas forcément à disposition (pas installé, pas autorisé …).
Voici donc un petit script qui va calculer tout ca directement à partir des logs Apache.
Pour infos, la plupart de mes logs Apache sont sous le format suivant (il est important de connaître son LogFormat pour bien ajuster le script) :
"%V %h %{PHPSESSID}C %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""Et le petit script qui va calculer le nombre de visiteurs uniques pour le LogFormat ci-dessus et en prenant les fichiers de logs placé dans « /var/www/ » et nommé avec le nom du domaine :
#!/bin/sh for k in `ls /var/www/*.log.1`; do domaine=`echo $k | cut -f4 -d'/' | sed 's/.log.1//g'` nbr=`cat $k | cut -f2 -d' ' | sort -n | uniq | wc -l` len=`echo $domaine | wc -c` if [ $len -gt 16 ]; then tab="\t\t" else tab="\t\t\t" fi echo "$domaine$tab$nbr" done
Ce qui donne :
domaine.net 347 domaine.com 283 blog.domaine.net 1301 www.domaine.fr 705
LogFormat personnalisé & variable PHP
Si vous aimez analyser vos logs Apache pour faire des statistiques personnelles, il est toujours intéressant de pouvoir customiser le format de ses logs. Personnellement, je spécifie des format de logs dans « /etc/apache/conf.d/logformat » avec la syntaxe suivante :
LogFormat "%V %h %{forum_username}C %{PHPSESSID}C %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" forum LogFormat "%V %h %{user_id}n %{PHPSESSID}C %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" site
Dans le premier cas, je précise 2 variables venant des cookies, on le remarque avec le « C » placé après la variable.
Dans le second exemple, j’utilise une variable provenant d’un cookie mais aussi de mon environnement avec « %{user_id}n ». Le petit « n » placé à la fin signifie que la valeur provient de l’utilisation d’un apache_note()
Dans mon code, je définis simplement :
apache_note('user_id', $monUserId);
J’utilise beaucoup cette technique afin d’obtenir des stats très précise sur mes visiteurs mais aussi d’effectuer des analyses afin d’enrechir un CRM par exemple.
Il suffit par la suite dans son fichier de configuration Apache de placer la directive suivante :
CustomLog /var/www/forum.domaine.net.log forum
Voilà, en espérant que ces petites astuces vous servent par la suite ;)
Tags: astuces, Linux, mysql, tips
Une Réponse
Laisser un message


Pour le reset du mot de passe MySQL sous Debian/Ubuntu, il est possible de passer par l’utilisateur « debian-sys-maint » ce qui a notamment l’intérêt de ne pas devoir arrêter MySQL.