Problème avec tuning-primer.sh

Fermé
dudulix Messages postés 39 Date d'inscription vendredi 8 mai 2009 Statut Membre Dernière intervention 6 janvier 2011 - Modifié par dudulix le 23/06/2010 à 20:20
mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 - 13 juil. 2010 à 12:12
Bonjour,

J'ai installé sur mon serveur tuning-primer.sh pour essayer de voir ce qui pourrait être modifié dans ma configuration, car mon site est très très lent.

J'ai déjà dans mon fichier my.cnf modifié
key_buffer = 16M (passé en 32M)
query_cache_limit = 1M (passé en 2M)
query_cache_size = 16M (passé en 32M)

donc, pour en revenir à tuning-primer.sh, quand je le lance via Putty
./tuning-primer.sh

j'ai comme réponse

Using login values from ~/.my.cnf 
- INITIAL LOGIN ATTEMPT FAILED - 
Testing for stored webmin passwords: 
Could not auto detect login info! 
Found Sockets: /var/run/mysqld/mysqld.sock 
Using: /var/run/mysqld/mysqld.sock 
Would you like to provide a different socket?: [y/N] 

quoi répondre ?

Merci par avance de votre aide.

5 réponses

mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 7 753
Modifié par mamiemando le 24/06/2010 à 20:08
Ton serveur mysql écoute sur un port et traite un socket particulier. A priori c'est effectivement /var/run/mysqld/mysqld.sock. Si un autre serveur mysql tournait sur ce PC, il utiliserait un autre fichier sock.

A priori vu que tu as un seul serveur mysql, c'est donc le bon fichier qui est ici indiqué (tu peux vérifier qu'il existe avec un ls et que c'est lui qui est utilisé dans /etc/mysql/my.cnf).

Actuellement ton logiciel essaye de s'authentifier auprès de mysql. Un client mysql (mysql, mysqladmin, mysql-admin, mysql-query-browser, mysqldump...) est en général capable de s'inspirer en terme de configuration du fichier /etc/mysql/my.cnf (commun à tous les utilisateurs) et ~/.my.cnf (spécifique à l'utilisateur courant). Typiquement l'utilisateur mando utilise en plus de /etc/mysql/my.cnf le fichier ~mando/.my.cnf (qui s'écrit également /home/mando/.my.cnf).

C'est un endroit ou un client mysql peut trouver un mot de passe (et en général quand il en trouve un, il l'utilise), ainsi que le login mysql à utiliser pour se connecter à la base. Ainsi, si ce fichier contient une mauvaise information (mauvais login, mauvais mot de passe), impossible de se connecter à la base.

Si le mot de passe n'est pas stocké, on utilise en général l'option -p :

mysql -u root -p -h 11.22.33.44


Ici le client mysql tente de se connecter en root au serveur mysql qui a pour IP 11.22.33.44.

Maintenant, regardons ce que fait tuning-primer.sh. Il a besoin de récupérer pas mal d'information auprès du serveur mysql. Il doit donc pouvoir s'y connecter (donc avoir un login et un mot de passe). Il faut donc que ce script ait ces informations (login, mot de passe, host), quitte à les récupérer dans /etc/mysql/my.cnf ou ~/.my.cnf. Si ces fichiers sont renseignés et mal renseignés... ça ne peut pas marcher.

Admettons à présent que ces fichiers soient correctement renseignés ou que les aspects d'authentification du client mysql ne soient pas configuré. Il faut vérifier que ton serveur de base autorise ce login avec ce mot de passe, et que cette authentification soit autorisée pour ce client. En effet, un profil mysql peut être restreint en fonction de sa provenance (l'IP ou le nom de machine du client mysql).

Ceci peut se voir en se connectant sur la base mysql et en tapant la requête suivante dans un client mysql le permettant (mysql, mysql-query-browser...) :

select host,user,password from mysql.user


Je t'invite à lire ceci :
http://dev.mysql.com/doc/refman/5.0/fr/adding-users.html

Note que le mot de passe est chiffré dans la base. Pour le changer :
http://dev.mysql.com/doc/refman/5.0/fr/passwords.html

Si tout te semble correct vérifie sur le serveur que le serveur mysql est lancé et écoute correctement :

sudo service mysql restart 
netstat -ntlp


Si ton client mysql et ton serveur mysql sont sur deux machines distinctes, vérifies que le client voit le port de cette machine ouvert (avec nmap) et que ce client utilise un profil mysql autorisé à ce connecter depuis cette machine cliente. Si par exemple le serveur a pour IP 11.22.33.44, tape sur la machine cliente :

nmap 11.22.33.44


Bonne chance
3
mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 7 753
26 juin 2010 à 23:50
De rien :)

Pour faire la check list :

A) Vérifications réseau

1) Côté serveur :

- vérifie que le serveur est lancé
- vérifie qu'il écoute sur le réseau et sur les bonnes interfaces réseaux :

sudo service mysql restart
netstat -ntlp


En particulier si ton client mysql provient d'une autre machine, le serveur mysql doit écouter non pas sur 127.0.0.1 (bind-adress qui n'autorise que les connexions locales au serveur) mais par exemple sur 0.0.0.0.

La commande netstat permet en outre de vérifier que le port sur lequel écoute mysql (a priori 3306). Si tu as besoin de l'IP de cette machine pour les tests de la partie 2 :

/sbin/ifconfig -a


2) Côté client

Vérifie que la machine hébergeant le serveur est
- routable (route)
- résolue si tu ne le joins en utilisant une IP mais un nom de machine (nslookup)
- répond au ping
- a son port mysql (a priori 3306) est ouvert grâce à nmap :

/sbin/route -n
nslookup mon.serveur.fr
ping -c2 mon.serveur.fr
nmap mon.serveur.fr


A) Vérifications mysql

1) Côté serveur :

Vérifie les profils enregistrés dans ta table mysql.user. Il faut que le profil que tu utilises côté client y figure et soit référencé pour le bon host (% fais office de joker, localhost désigne une connexion locale au serveur).

Vérifie que le login que tu vas utiliser à terme sur ton client mysql fonctionne au niveau du serveur en tapant sur celui-ci :

mysql -u login -p


Si ça marche c'est bon signe. Ceci dit attention. En mysql les règles définies dans mysql.user s'appliquent à un couple (user,host). Cela signifie que le profil est potentiellement disponible ou pas selon sa provenance et peu avoir des mots de passe différent (ou pas) pour chaque contexte.

Les lignes de mysql.user sont classées de l'host le plus spécifique au moins spécifique (par exemple localhost puis 192.168.1.% puis %. Une fois l'host déterminée, mysql ordonne les règles candidates par login et prends le plus spécifique (le login '' faisant office de joker).

Ensuite soit ce couple a un mot de passe (et il faudra s'identifier grâce à l'option -p), soit le compte est accessible sans saisir de mot de passe.

2) Côté client

Vérifie les fichier /etc/mysql/my.cnf et ~/.my.cnf et le mot de passe que tu as saisi.

mysql -u login -p -h monserveur.fr
1
mamiemando Messages postés 33113 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 15 mai 2024 7 753
13 juil. 2010 à 12:12
Comme tout fichier commençant pas un "." il s'agit d'un fichier "caché". En fait ces fichiers ne sont pas affichés par défaut dans un ls ou dans un explorateur de fichiers mais sinon ils se manipulent comme des fichiers ordinaires.

Dans les options de ton explorateur de fichiers, il suffit de lui dire de les afficher.

Avec un ls il suffit de faire par exemple :

ls -a
ls -a ~
ls -a ~mando
ls -a /home/mando


Pour modifier ce fichier tu peux utiliser n'importe quel éditeur texte, par exemple nano :

nano ~/.my.cnf


Pour sauver quitter, appuie sur ctrl x.

Attention : l'opérateur ~ est en fait ~mando si tu es loggué en mando. Quand tu lances tuning-primer.sh il va lire ~/.my.cnf. Si par exemple tu lances ce script en root, il va lire ~root/.my.cnf, en d'autres termes /root/.my.cnf. Bref, attention à modifier le bon fichier. Ceci dit ce script ne requiert a priori pas de droits root, il faut simplement que tu disposes d'un login et d'un mot de passe mysql correct.

Histoire de comprendre ce qui se passe, tu devrais déjà voir si tu arrives à te connecter avec le client mysql de base. En admettant que tu aies configuré ~/.my.cnf pour te connecter en root sans avoir à taper de mot de passe, cette commande devrait marcher :

mysql -u root


Si tu te prends une erreur d'authentification c'est soit que ~/.my.cnf est mal rempli, soit qu'il n'existe pas. Auquel cas il faut le corriger / le créer ou se connecter ainsi :

mysql -u root -p


Voici un exemple de ~/.my.cnf :

(mando@silk) (~) $ cat /home/mando/.my.cnf 
[client]
password="pouet"


Bonne chance
1
dudulix Messages postés 39 Date d'inscription vendredi 8 mai 2009 Statut Membre Dernière intervention 6 janvier 2011 2
26 juin 2010 à 12:26
Salut Mamiemando,

Merci pour cette SUPER explication .. Apparemment je n'ai pas de mot de passe stocké dans le fichier my.cnf

Bon je vais potasser tout ça et essayer de mettre en pratique !

A++
0

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

Posez votre question
dudulix Messages postés 39 Date d'inscription vendredi 8 mai 2009 Statut Membre Dernière intervention 6 janvier 2011 2
12 juil. 2010 à 18:41
Bonjour,

Heu, je n'arrive pas à localiser ~/.my.cnf

J'ai retourné le gestionnaire de fichiers de Webmin, en long en large et en travers .. Je ne comprends pas comment y accéder.

++
0