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

en comprobar el error 24 en la cáscara que diceDemasiados archivos abiertos de error en Ubuntu 8.04

>>perror 24 

OS error code 24: Too many open files 

¿Cómo puedo solucionar esto?

Respuesta

0

No hay garantía de que "24" sea un número de error de nivel de sistema operativo, por lo que no debe suponer que esto significa que hay demasiados identificadores de archivo abiertos. Podría ser algún tipo de código de error interno utilizado en mysql. Sugiero preguntar en las listas de correo de mysql sobre esto.

+0

Espere, mentí. En este caso, 24 probablemente significa lo que piensas que significa. Al menos, otra persona parece haber experimentado esto: consulte [este informe de error] (http://bugs.mysql.com/bug.php?id=26114) en el rastreador de errores de mysql, aunque este es un informe bastante antiguo. . ¿Estás usando mysql 5.0 por casualidad? –

1

También podría ser posible que, por algún código que acceda a las tablas no las cierre adecuadamente y en un punto de tiempo, se pueda alcanzar la cantidad de archivos abiertos.

Por favor, consulte http://dev.mysql.com/doc/refman/5.0/en/table-cache.html por una posible razón también.

Al reiniciar mysql, este problema debería desaparecer (aunque podría volver a ocurrir a menos que se resuelva el problema subyacente).

1

Puede aumentar los límites de su sistema operativo editando /etc/security/limits.conf.

También puede instalar el comando "lsof" (Archivos LiSt abiertos) para ver los archivos < -> Relación de procesos.

2

añadir --single_transaction a su comando mysqldump

20

En primer lugar, identificar los límites determinados usuarios o grupos que tienen que hacer lo siguiente:

[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 línea importante es:

abrir archivos (-n) 1024

Como puede ver, el proveedor del sistema operativo envía esta versión w con la configuración básica de Linux: 1024 archivos por proceso.

Esto obviamente no es suficiente para una instalación ocupada de MySQL.

Ahora, para solucionar este problema, tiene que modificar el archivo siguiente:

/etc/security/limits.conf

mysql    soft nofile   24000 
mysql    hard nofile   32000 

Algunas versiones de Linux también requieren una configuración adicional para conseguir que esto se adhieren a procesos daemon versus sesiones de inicio de sesión. En Ubuntu 10.04, por ejemplo, es necesario establecer también los límites de la sesión pam añadiendo la siguiente línea a /etc/pam.d/common-session:

session required pam_limits.so 
+0

Probablemente, si '/ etc/pam.d/common-session-noninteractive' existe, debe agregar' session required pam_limits.so' a este archivo también. – peppered

+0

Experimenté este problema exacto con Debian Wheezy + MySQL 5.6. Gracias por la respuesta. –

8

Toda una vieja pregunta, pero aquí está mi granito de arena.

Lo que podría estar experimentando es que el motor mysql no configuró su variable "open-files-limit" a la derecha.

Puede ver cuántos archivos está permitiendo que mysql abra mysql> SHOW VARIABLES;

Probablemente se establece en 1024 incluso si ya se establecieron los límites a valores más altos.

Puede usar la opción --open-files-limit = XXXXX en la línea de comando para mysqld.

Cheers

+0

¡Tenía exactamente el mismo problema anteriormente y esto lo resolvió para mí! +1 para una respuesta simple y fácil de usar :-) – gawbul

1

No hay necesidad de configurar PAM, como creo. En mi sistema (Debian 7.2 con Percona 05/05/31-rel30.3-520.squeeze) Tengo:

Antes my.cnf cambios:

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

Después de añadir "open_files_limit = 4096" en mi. CNF y reiniciar mysqld, llegué:

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

12345 y 23456 es el proceso mysqld PID, por supuesto.

MOSTRAR VARIABLES COMO 'open_files_limit' show 4096 now.

Todo parece estar bien, mientras que "ulimit" no muestran cambios:

\# su - mysql -c bash 
\# ulimit -n 
1024 
Cuestiones relacionadas