IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration MySQL Discussion :

Administration de mysql sous linux


Sujet :

Administration MySQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 125
    Par défaut Administration de mysql sous linux
    Je ne sais pas si je suis dans le bon forum pour ce post puisqu'il traite de mysql mais aussi de réseau et linux et php ...

    Je me suis retrouvé 4 fois de suite avec un message d'erreur "too many connections"
    et depuis j'investigue, mais je ne suis pas une brute en admin réseau/ mysql. C'est pourquoi j'aurais besoin de vos lumières.

    Ma config machine
    Plesk 9.5.4
    OS Linux CentOS 5 32 bits 2.6.33.5-1ikl
    CPU GenuineIntel, Intel(R) Xeon(R)CPU X3430 @ 2.40GHz (4 coeurs, 2.4 GHz)
    8Go DDR3

    J'ai d'abord fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mysqladmin -uadmin -p`cat /etc/psa/.psa.shadow` processlist
    +-------+----------+---------------------+--------------+---------+-------+-------+------------------+
    | Id    | User     | Host                | db           | Command | Time  | State | Info             |
    +-------+----------+---------------------+--------------+---------+-------+-------+------------------+
    | 11175 | user1 | xxx.xxx.xxx.xxx:44550 | mydatabase1      | Sleep   | 11677 |       |                  |
    ...
    | 10810 | user2    | xxx.xxx.xxx.xxx:42421 | mydatabase2 | Sleep   | 23650 |       |                  |
    ...et 99% des lignes sont de ce type : Sleep  = pas de requête mais users bloqués
    Quand je fait pour les ports ci dessus cités un
    netstat -ntp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
    tcp        0      0 xxx.xxx.xxx.xxx:44550         xxx.xxx.xxx.xxx:3306          ESTABLISHED 12611/httpd 
    tcp        0      0 xxx.xxx.xxx.xxx:3306          xxx.xxx.xxx.xxx:44550         ESTABLISHED 4022/mysqld
    tcp        0      0 xxx.xxx.xxx.xxx:3306          xxx.xxx.xxx.xxx:42421         ESTABLISHED 4022/mysqld  
    tcp        0      0 xxx.xxx.xxx.xxx:42421         xxx.xxx.xxx.xxx:3306          ESTABLISHED 2717/httpd
    ...

    et les PID asociés sont 4022 pour le mysqld, et un port à chaque fois différent pour httpd

    Car si je fais un
    ps aux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    mysql     4022  0.0  0.4 143992 37292 ?        Sl   Jan08   1:33 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --socket=/var/lib/mysql/mysql.sock
    apache    2717  0.0  0.4  71456 41076 ?        S    06:05   0:03 /usr/sbin/httpd
    apache   12611  0.0  0.5  74812 44604 ?        S    11:22   0:02 /usr/sbin/httpd
    Dans my.cnf
    j'ai augmenté max_connections=150 au lieu de 100 (par défaut)
    j'ai diminué le wait_timeout=7200 au lieu de 28800
    j'ai augmenté table_cache=128 au lieu de 64

    Je viens de lire que ces processus en Sleep c'est surement la faute de mes connections à mysql : j'utilise mysql_pconnect au lieu de mysql_connect
    mais je n'arrive pas à savoir à partir de quand (combien d'utilisateurs simultanés, combien de bases / tables ouvertes , ...) il faut mieux préférer l'une à l'autre.

    Qu'est-ce que vous pourriez me conseiller d'autre comme modif de my.cnf ? Quel critères pour mysql_connect / pconnect ?

    Merci d'avance.

    PS : j'ai trouvé ce script php à mettre en cron. Il a l'air exactement ce que je cherche mais je ne suis pas sûr des conséquences potentielles (fermeture de mysql ? => déconnection autre...?) : qu'en pensez-vous ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #!/usr/bin/php -q
    <?php
    define('SERVER','localhost');
    define('USER','root');
    define('PASSWORD','');
    define('UPTIME',1000);
     
    $link = mysql_connect(SERVER, USER, PASSWORD);
     
    $query = "show processlist;";
    $result = mysql_query($query) or die ("failed $query");
    while ($row = mysql_fetch_array($result))
    {
    //	echo '<pre>'.var_dump($row).'</pre>';
    	if (($row['Time'] > UPTIME && $row['Command'] == "Sleep") && ($row['User'] != "root"))
    	{
    		$killed = 0;
    		mysql_query("kill ".$row['Id']) or ($killed = 1);
    		if ($killed = 1)
    		{
    			echo
    			"Killed process number ".$row['Id'].", with a User of ".$row['User']
    			." in database ".$row['db'].", which had a time of ".$row['Time']
    			.", and a command of ".$row['Command']."\r\n\r\n";
    		}
    	}
    }
    @mysql_close($link);
    ?>

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 125
    Par défaut
    A priori les modif que j'ai effectué ne sont pas suffisantes puisque j'ai toujours un nombre qui finit par croître :
    actuellement le Max_used_connections est de 101

    mais ce qui m'étonne c'est que je n'ai "seulement" que 46 processus (et pas 101 !) quand je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqladmin -uadmin -p`cat /etc/psa/.psa.shadow` processlist
    je ne comprends vraiment pas le méandres de l'administration de mysql et des processus. Pouvez-vous éclairer ma lanterne ?

    Et éventuellement changer le post de rubrique si le modo pense qu'il pourrait être plus regardé / répondu ailleurs.

    Merci d'avance.

  3. #3
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    EDIT : DESOLE GROSSE BETISE DITE !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    http://be2.php.net/manual/fr/functio...l-pconnect.php

    mysql_pconnect() se comporte exactement comme mysql_connect(), mais avec deux différences majeures :

    Premièrement, lors de la connexion, la fonction essaie de trouver une connexion permanente déjà ouverte sur cet hôte, avec le même nom d'utilisateur et de mot de passe. Si une telle connexion est trouvée, son identifiant est retourné, sans ouvrir de nouvelle connexion.

    Deuxièmement, la connexion au serveur MySQL ne sera pas terminée avec la fin du script. Au lieu de cela, le lien sera conservé pour un prochain accès (mysql_close() ne terminera pas une connexion persistante établie par mysql_pconnect()).

    C'est pourquoi ce type de connexion est dite persistante.
    Avertissement
    L'utilisation des connexions persistantes requiert des paramétrages d'Apache et de MySQL pour vous assurer que vous n'atteindrez pas la limite maximale de nombre de connexions simultanées autorisée par MySQL.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 125
    Par défaut
    Oui, c'est ce que j'ai vu (récemment hélas). Ce qui m'intéresserais donc c'est

    Citation:
    Avertissement
    L'utilisation des connexions persistantes requiert des paramétrages d'Apache et de MySQL pour vous assurer que vous n'atteindrez pas la limite maximale de nombre de connexions simultanées autorisée par MySQL.
    Comment paramétrer Apache et mysql dans ce cas ? Quelles valeurs ajuster/modifier... Dans quel sens ?

    Deuxièmement, la connexion au serveur MySQL ne sera pas terminée avec la fin du script. Au lieu de cela, le lien sera conservé pour un prochain accès
    Quand la connection se coupe t'elle alors? quel est le(s) paramètre(s) qui en décide ?

    J'ai actuellement environ 40 domaines installés sur ce serveur dont la fréquentation va de 10 visites/jour à 200 visites/jour (exceptionnellement 1500 visites/jours pour un domaine) mais tous ceux avec base mysql sont paramétrés avec un pconnect...

Discussions similaires

  1. Comment désinstaller MySQL sous linux
    Par nahmsath dans le forum Installation
    Réponses: 5
    Dernier message: 18/09/2007, 10h46
  2. Recherche outil d'administration de mysql sous LINUX
    Par PamelaGeek dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 10/04/2006, 16h45
  3. MySQL sous linux comment s'y prendre?
    Par Doberman dans le forum Débuter
    Réponses: 4
    Dernier message: 10/01/2006, 11h58
  4. Sauvegarde efficace d'une base MySql sous Linux
    Par Arioch dans le forum Administration
    Réponses: 9
    Dernier message: 19/09/2004, 10h24
  5. Chemin d'accès de MySQL sous linux
    Par sylvain_neus dans le forum Installation
    Réponses: 6
    Dernier message: 17/03/2004, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo