:: DEVELOPER ZONE
Si vous obtenez ERROR '...' not found (errno: 23), Can't open file: ... (errno: 24), ou toute autre erreur avec errno 23 ou
errno 24 de la part de MySQL, cela signifie que vous n'avez pas alloué
assez de descripteurs de fichiers à MySQL. Vous pouvez utiliser l'utilitaire
perror pour obtenir une description de ce que veut dire l'identifiant
de l'erreur :
shell> perror 23 File table overflow shell> perror 24 Too many open files shell> perror 11 Resource temporarily unavailable
Le problème ici est que mysqld essaye de garder trop de fichiers
ouverts en même temps. Vous pouvez soit demander à mysqld de ne
pas ouvrir autant de fichiers simultanément ou augmenter le nombre de
descripteurs de fichiers alloués à mysqld.
Pour dire à mysqld de garder moins de fichiers ouverts en même temps,
vous pouvez rendre le cache de tables plus petit en utilisant l'option
-O table_cache=32 de safe_mysqld (la valeur par défaut est 64).
Réduire la valeur de max_connections réduira aussi le nombre de fichiers
ouverts (90 comme valeur de défaut).
Pour changer le nombre de descripteurs de fichiers alloués à mysqld,
vous pouvez utiliser l'option --open-files-limit=# de safe_mysqld
ou -O open-files-limit=# de mysqld. See Section 14.5.3.20, « Syntaxe de SHOW VARIABLES ».
La fa¸on la plus facile de faire cela est d'ajouter cette option dans votre
fichiers d'options. See Section 4.3.2, « Fichier d'options my.cnf ». Si vous avec une ancienne version de
mysqld qui ne le supporte pas, vous pouvez éditer le script safe_mysqld.
Il y a une ligne commentée ulimit -n 256 dans le script. Vous pouvez
enlever le caractère '#' pour décommenter cette ligne, et changer le nombre
256 pour affecter le nombre de descripteurs de fichiers alloués à mysqld.
ulimit (et open-files-limit) peuvent augmenter le nombre de
descripteurs de fichiers, mais seulement jusqu'à la limite imposée par le
système d'exploitation. Il y a aussi une limite 'matérielle' qui ne peut être
dépassée que si vous démarrez safe_mysqld ou mysqld en tant que root
(souvenez-vous juste que vous devez aussi utiliser l'option --user=...
dans ce cas). Si vous avez besoin de repousser les limites du système d'exploitation
pour les descripteurs de fichiers disponibles pour chaque processus, consultez
la documentation de votre système.
Note : Notez que si vous démarrez le Shell tcsh, ulimit ne fonctionnera pas !
tcsh retournera aussi des valeurs incorrectes si vous atteignez la limite
courante ! Dans ce cas, vous devez démarrer safe_mysqld avec sh !
© 1995-2005 MySQL AB. All rights reserved.
