2009-02-02 13 views
12
mysqldump: Couldn't execute 'show fields from `tablename`': Out of resources when opening file './databasename/tablename#P#p125.MYD' (Errcode: 24) (23) 

sur la vérification de l'erreur 24 sur la coque il ditTrop de fichiers ouverts erreur sur Ubuntu 8.04

>>perror 24 

OS error code 24: Too many open files 

comment puis-je résoudre ce problème?

Répondre

0

Il n'y a aucune garantie que "24" est un numéro d'erreur au niveau du système d'exploitation, donc ne supposez pas que cela signifie que trop de handles de fichiers sont ouverts. Il pourrait s'agir d'un type de code d'erreur interne utilisé dans mysql lui-même. Je suggère de demander sur les listes de diffusion mysql à ce sujet.

+0

Attendez, je mentais. Dans ce cas, 24 signifie probablement ce que vous pensez que cela signifie. Au moins une autre personne semble avoir vécu cela - voir [ce rapport de bogue] (http://bugs.mysql.com/bug.php?id=26114) sur le traqueur de bogues mysql, bien qu'il s'agisse d'un rapport plutôt ancien . Utilisez-vous mysql 5.0 par hasard? –

1

Il pourrait également être possible que par un code qui accède aux tableaux se referment correctement et sur une période donnée, le nombre de fichiers ouverts pourrait être atteint.

Veuillez également vous référer au http://dev.mysql.com/doc/refman/5.0/en/table-cache.html pour une raison possible.

Redémarrer mysql devrait faire disparaître ce problème (bien que cela puisse se produire à nouveau, sauf si le problème sous-jacent est résolu).

1

Vous pouvez augmenter vos limites de système d'exploitation en éditant /etc/security/limits.conf.

Vous pouvez également installer la commande "lsof" (LiSt Open Files) pour voir les fichiers < -> Relation de processus.

2

ajouter --single_transaction à votre commande mysqldump

20

Dans un premier temps, d'identifier les certaines limites de l'utilisateur ou du groupe que vous devez effectuer les opérations suivantes:

[email protected]:~# sudo -u mysql bash 
[email protected]:~$ ulimit -a 
core file size   (blocks, -c) 0 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 71680 
max locked memory  (kbytes, -l) 32 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 1024 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 8192 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 71680 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 
[email protected]:~$ 

La ligne importante est:

ouvrir les fichiers (-n) 1024

Comme vous pouvez le voir, le fournisseur de votre système d'exploitation envoie cette version avec la configuration Linux de base - 1024 fichiers par processus.

Ce n'est évidemment pas suffisant pour une installation MySQL occupée.

Maintenant, pour résoudre ce problème, vous devez modifier le fichier suivant:

/etc/security/limits.conf

mysql    soft nofile   24000 
mysql    hard nofile   32000 

Certaines saveurs de Linux ont également besoin de configuration supplémentaire pour obtenir ce pour coller à processus de démon par rapport aux sessions de connexion. Dans Ubuntu 10.04, par exemple, vous devez également définir les limites de session pam en ajoutant la ligne suivante à /etc/pam.d/common-session:

session required pam_limits.so 
+0

Probablement, si '/ etc/pam.d/common-session-noninteractive' existe, vous devez également ajouter' session required pam_limits.so' dans ce fichier. – peppered

+0

J'ai rencontré ce problème avec Debian Wheezy + MySQL 5.6. Merci d'avoir répondu. –

8

Tout à fait une vieille question, mais voici mes deux cents. La chose que vous pourriez rencontrer est que le moteur mysql n'a pas défini sa variable "open-files-limit".

Vous pouvez voir le nombre de fichiers que vous autorisez à ouvrir mysql mysql> SHOW VARIABLES;

Probablement réglé sur 1024 même si vous avez déjà défini les limites à des valeurs plus élevées.

Vous pouvez utiliser l'option --open-files-limit = XXXXX dans la ligne de commande pour mysqld.

Vive

+0

J'ai eu exactement le même problème précédemment et cela a résolu pour moi! +1 pour une réponse simple et conviviale :-) – gawbul

1

Il n'y a pas besoin de configurer PAM, comme je pense. J'ai sur mon système (Debian 7.2 avec Percona 5.5.31-rel30.3-520.squeeze):

Avant my.cnf changements:

\#cat /proc/12345/limits |grep "open files" 
Max open files   1186     1186     files 

Après avoir ajouté "open_files_limit = 4096" dans mon. CNF et redémarrer mysqld, je suis arrivé:

\#cat /proc/23456/limits |grep "open files" 
Max open files   4096     4096     files 

12345 et 23456 est processus mysqld PID, bien sûr.

AFFICHER DES VARIABLES COMME 'open_files_limit' afficher 4096 maintenant.

Tout semble ok, alors que "ulimit" ne montrent aucun changement:

\# su - mysql -c bash 
\# ulimit -n 
1024 
Questions connexes