MySQL non può aprire file dopo aver aggiornato il server: errno: 24

16

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

MySQL: Ubuntu distro 5.5.31

Apparmor: REMOVED!

Il server ha funzionato in modo solido per oltre un anno. Quindi questo lunedì MySQL ha iniziato a fallire. Un aggiornamento ha causato il problema e non riusciamo a capirlo. Abbiamo anche provato a tornare a MySQL 5.5.30 ma senza fortuna. Siamo tornati alle 5.5.31.

Voci del registro errori 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)

Sembra che stiamo incontrando un problema ulimit. Abbiamo completamente rimosso APPARMOR. Abbiamo aumentato /etc/security/limits.conf e ancora senza fortuna:

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

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

E per mostrare che limits.conf funziona:

[email protected]:/etc/security# ulimit -Sa | grep "open files"
open files                      (-n) 49152

[email protected]:/etc/security# ulimit -Ha | grep "open files"
open files                      (-n) 65536

E qui ci sono le voci importanti in my.cnf

[mysqld_safe]
open_files_limit = 16384

[mysqld]
open_files_limit = 16384

Tuttavia:

[email protected]:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit                                  | 1024

Siamo totalmente stumped e down. Qualsiasi assistenza sarebbe molto apprezzata.

    
posta Van 30.04.2013 - 14:17

4 risposte

19

Sistema operativo: Distribuzioni di Ubuntu (Debian)

Opzione server MySQL: open-files-limit

Sembra che Debian upstart non usi i parametri definiti in /etc/security/limits.conf , quindi quando lanci mysql attraverso servizio (e quindi, sotto upstart), sostituisce quei limiti definiti e utilizza il valore predefinito 1024.

La soluzione è modificare il file mysql.conf che definisce il servizio upstart, si trova in /etc/init/mysql.conf e aggiunge le seguenti righe prima il blocco pre-avvio :

# 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

References:

risposta data Van 30.04.2013 - 16:21
4

Ho avuto lo stesso problema su Ubuntu 15.10.

link - ha portato la soluzione:

  1. controlla se /lib/systemd/system/mysql.service o /lib/systemd/system/mysqld.service è già esistente
  2. (nel mio caso) se no, crea /lib/systemd/system/mysql.service e copia il contenuto di questo file link e aggiungi le due linee da qualche parte nel file

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  3. se uno o entrambi i file esistenti, controlla se queste due righe sono incluse:

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  4. Esegui systemctl daemon-reload

... e tutto dovrebbe andare bene.

    
risposta data Hendrik Eggers 31.01.2016 - 19:34
1

Poiché nessuno dei precedenti ha risolto il problema per me (solo il sistema ha esaurito la memoria), ecco la soluzione che ho trovato:

In /etc/mysql/my.conf è necessario aumentare MySQLs open_files_limit interno. Quindi aggiungi temporaneamente questo alla configurazione e riavvia MySQL.

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

Dopo aver eseguito l'operazione che ti dà l'errore troppi file aperti , puoi ripristinare la configurazione al suo valore predefinito e riavviare di nuovo MySQL.

    
risposta data mniess 13.04.2017 - 15:34
0

Grazie per la soluzione. Ma per me, il problema è stato oscurato dagli altri due fatti.

  1. La mia directory dei dati è diversa dall'installazione predefinita. Per più motivi, sia storici che tecnici.
  2. Stavo aggiornando da un'installazione molto vecchia, che passava attraverso una serie di back e forward-ports. Al primo avvio di MySQL 5.5 appena installato, il motore InnoDB non è stato attivato (l'implementazione interna è stata disabilitata nel file di configurazione, ma il plug-in disponibile nelle versioni precedenti non è presente in 5.5) e il marchio di aggiornamento è stato creato senza effettivamente l'aggiornamento qualsiasi tabella.

Dopo aver risolto il problema di InnoDB, si stava ancora sputando

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

Ho dovuto avviare mysqld nella console di root e riavviare manualmente

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

Quindi il server ha iniziato a mostrare i database, ma non è riuscito ad accedere ad alcune delle tabelle. La tua soluzione con i limiti aumentati ha risolto il resto dei problemi, grazie!

    
risposta data AnrDaemon 28.01.2015 - 01:56

Leggi altre domande sui tag