mysql linux mysqldump ubuntu-8.04

mysql - Demasiados errores de archivos abiertos en Ubuntu 8.04



linux mysqldump (7)

No hay garantía de que "24" sea un número de error del nivel del sistema operativo, por lo que no debe suponerse 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.

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

al verificar el error 24 en el caparazón dice

>>perror 24 OS error code 24: Too many open files

¿Cómo puedo solucionar esto?


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

También puede instalar el comando " lsof " (LiSt Open Files) para ver la relación Archivos <-> Procesos.


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

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

Reiniciar mysql debería hacer que este problema desaparezca (aunque podría volver a suceder a menos que se solucione el problema subyacente).


agregue --single_transaction a su comando mysqldump


Una vieja pregunta, pero aquí están mis dos centavos.

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

Puedes ver cuántos archivos permites a mysql abrir mysql> SHOW VARIABLES;

Probablemente se establece en 1024 incluso si ya establece 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.

Aclamaciones


Al principio, para identificar los límites de ciertos usuarios o grupos, debe hacer lo siguiente:

root@ubuntu:~# sudo -u mysql bash mysql@ubuntu:~$ 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 mysql@ubuntu:~$

La línea importante es:

abrir archivos (-n) 1024

Como puede ver, el proveedor del sistema operativo envía esta versión 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 esto, debes modificar el siguiente archivo:

/etc/security/limits.conf

mysql soft nofile 24000 mysql hard nofile 32000

Algunos sabores de Linux también requieren una configuración adicional para que esto se adhiera a los procesos de daemon frente a las sesiones de inicio de sesión. En Ubuntu 10.04, por ejemplo, también necesita establecer los límites de la sesión de pam agregando la siguiente línea a /etc/pam.d/common-session :

session required pam_limits.so


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

Antes de que my.cnf cambie:

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

Después de agregar "open_files_limit = 4096" en my.cnf y mysqld restart, obtuve:

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

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

MOSTRAR VARIABLES COMO ''open_files_limit'' muestra 4096 ahora.

Todo se ve bien, mientras que "ulimit" no muestra cambios:

/# su - mysql -c bash /# ulimit -n 1024