MySQL no puede abrir archivos después de actualizar el servidor: errno: 24

MySQL no puede abrir archivos después de actualizar el servidor: errno: 24

Ubuntu:12.04 LTS (Linux mysql02 3.2.0-40-generic #64-Ubuntu SMP lunes 25 de marzo 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux)

MySQL:Distribución Ubuntu 5.5.31

Apariencia:¡REMOTO!

El servidor ha estado funcionando sólidamente durante más de un año. Luego, este lunes MySQL comenzó a fallar. Una actualización ha causado el problema y no podemos entender qué es. Incluso intentamos volver a MySQL 5.5.30 pero sin suerte. Regresamos a las 5.5.31.

Entradas del registro de errores de MySQL:

130430  7:55:46 [ERROR] Error in accept: Too many open files
130430  7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fclvod.frm' (errno: 24)
130430  7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fcnote.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcont.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcontv.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffnote.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/frcfcl.frm' (errno: 24)

Parece que nos encontramos con un problema de ulimit. Hemos eliminado APPARMOR por completo. Hemos aumentado el/etc/security/limits.confy todavía no hay suerte:

# Out of desperation....
* soft  nofile  49152
* hard  nofile  65536

# No effect!?!!?
#mysql  soft  nofile  49152
#mysql  hard  nofile  65536

Y para mostrar ellímites.confestá trabajando:

root@mysql02:/etc/security# ulimit -Sa | grep "open files"
open files                      (-n) 49152

root@mysql02:/etc/security# ulimit -Ha | grep "open files"
open files                      (-n) 65536

Y aquí están las entradas importantes enmi.cnf

[mysqld_safe]
open_files_limit = 16384

[mysqld]
open_files_limit = 16384

Sin embargo:

root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit                                  | 1024

Estamos totalmente perplejos y deprimidos. Cualquier ayuda sería muy apreciada.

Respuesta1

SO:Implementaciones de Ubuntu (Debian)

Opción de servidor MySQL:límite de archivos abiertos

Parece que Debianadvenedizono utiliza los parámetros definidos en/etc/security/limits.conf, entonces cuando inicias mysql a través delserviciocomando (y por lo tanto, en advenedizo), anula esos límites definidos y utiliza el valor predeterminado 1024.

La solución es modificar elmysql.confarchivo que define el servicio advenedizo, se encuentra en/etc/init/mysql.confy agrega las siguientes lineasanteselpre iniciobloquear:

# NB: Upstart scripts do not respect
# /etc/security/limits.conf, so the open-file limits
# settings need to be applied here.
limit nofile 32000 32000
limit nproc 32000 32000

Referencias:

Respuesta2

Tuve el mismo problema en Ubuntu 15.10.

https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758- trajo la solución:

  1. compruebe si /lib/systemd/system/mysql.service o /lib/systemd/system/mysqld.service existe
  2. (en mi caso) si no, cree /lib/systemd/system/mysql.service y copie el contenido de este archivohttps://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/comments/11y agregue las dos líneas en algún lugar del archivo

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  3. Si uno o ambos archivos existen, verifique si estas dos líneas están incluidas:

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  4. ejecutarsystemctl daemon-reload

... y todo debería estar bien.

Respuesta3

Como nada de lo anterior solucionó el problema (solo provocó que el sistema se quedara sin memoria), aquí está la solución que encontré:

Necesita /etc/mysql/my.confaumentar el open_files_limit interno de MySQL. Así que agregue esto temporalmente a la configuración y reinicie MySQL.

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

Después de ejecutar la operación que le da lademasiados archivos abiertoserror, puede cambiar su configuración a su valor predeterminado y reiniciar MySQL nuevamente.

Respuesta4

Gracias por la solución. Pero para mí, la cuestión ha quedado eclipsada por los otros dos hechos.

  1. Mi directorio de datos es diferente de la instalación predeterminada. Por múltiples razones, tanto históricas como técnicas.
  2. Estaba actualizando desde una instalación muy antigua, que pasaba por varios puertos de avance y retroceso. En el primer inicio de MySQL 5.5 recién instalado, el motor InnoDB no se activó (la implementación interna estaba deshabilitada en el archivo de configuración, pero el complemento que estaba disponible en versiones anteriores no está presente en 5.5) y la marca de actualización se creó sin actualizar realmente. cualquier mesa.

Después de solucionar el problema de InnoDB, seguía escupiendo

mysql> SHOW DATABASES;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 24)

Tuve que iniciar mysqld en la consola raíz y reiniciar manualmente

/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --force

Luego, el servidor comenzó a mostrar bases de datos, pero no pudo acceder a algunas de las tablas. Su solución con límites aumentados solucionó el resto de los problemas, ¡gracias!

información relacionada