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 13.5.3.18, « 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
!
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.