MySQL non può aprire i file dopo l'aggiornamento del server: errno: 24


16

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

MySQL: Ubuntu distro 5.5.31

Apparmor: RIMOSSO!

Il server funziona da oltre un anno. Quindi questo lunedì MySQL ha iniziato a fallire. Un aggiornamento ha causato il problema e non possiamo capire di cosa si tratti. 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 riscontrando un problema con ulimit. Abbiamo rimosso completamente APPARMOR. Abbiamo aumentato /etc/security/limits.conf e non abbiamo ancora avuto fortuna:

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

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

E per mostrare il limits.conf funziona:

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

E qui ci sono le voci importanti in my.cnf

[mysqld_safe]
open_files_limit = 16384

[mysqld]
open_files_limit = 16384

Tuttavia:

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

Siamo totalmente sconcertati. Qualsiasi aiuto sarebbe molto apprezzato.


1
Quali messaggi di errore ci sono nei registri PRIMA di quello relativo a Troppi file aperti? Hai riavviato mysqld da quando hai cambiato open_files_limit, giusto?
Bert,

sì, abbiamo riavviato MySQL ogni volta che apportiamo modifiche. Abbiamo una tabella che viene segnalata come mancante (ed è per qualche motivo): 30430 8:36:39 InnoDB: errore: tentativo di aprire una tabella, ma Impossibile InnoDB: aprire il file tablespace './oti_lw_prod/apinvoice_charges .ibd '!
Van

Cordiali saluti, abbiamo spostato i nostri utenti sull'altro server master (duel master setup) sever (01) e ora presenta gli stessi identici sintomi. (01) aveva la stessa configurazione esatta di questo server in errore (02) ed è il nostro failover master se questo (02) dovesse morire. Bene, così tanto per quel piano. Siamo abbastanza sicuri che si tratti di un problema con il sistema operativo.
Van,

Sono sicuro che questo non ha funzionato per il Poster originale, ma per me questo è successo dopo un aggiornamento di sicurezza e il riavvio di mysql è stato sufficiente.
Kzqai,

Risposte:


19

Sistema operativo: distribuzioni Ubuntu (Debian)

Opzione server MySQL: limite di file aperti

Sembra che il Debian upstart non usi i parametri definiti in /etc/security/limits.conf , quindi quando si avvia mysql tramite il comando di servizio (e quindi, in upstart), ignora quei limiti definiti e usa il valore predefinito 1024 .

La soluzione è modificare il file mysql.conf che definisce il servizio di avvio , si trova in /etc/init/mysql.conf e aggiungere le seguenti righe prima del 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

Riferimenti:


Deludente questo non è documentato chiaramente da qualche parte. :( Siamo appena capitati sul post di David su serverfault.
Van

E questo non è un bug, secondo questo: bugs.launchpad.net/mysql-server/+bug/938669
Van

Ciò può diventare improvvisamente e in modo allarmante, evidente dopo l'aggiunta di partizioni alle tabelle che può causare un aumento dei file aperti.
markdwhite,

Questo ha funzionato per me su Ubuntu 15.10. Dopo aver aggiornato i pacchetti ho ricevuto tonnellate di messaggi di errore "Impossibile aprire il file", che hanno rotto tutti i miei siti: (... Grazie mille per avermi risparmiato un sacco di mal di testa e tempo.
Emmanuel

qualcuno può spiegare qual è il blocco "pre-avvio"? Sto eseguendo Ubuntu 16 e ho questo problema, ma il file di configurazione sembra diverso rispetto a prima
billynoah

4

Ha avuto lo stesso problema su Ubuntu 15.10.

https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 - ha portato la soluzione:

  1. controlla se esiste /lib/systemd/system/mysql.service o /lib/systemd/system/mysqld.service
  2. (nel mio caso) in caso contrario, creare /lib/systemd/system/mysql.service e copiare il contenuto di questo file https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/ commenti / 11 e aggiungi le due righe da qualche parte nel file

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

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

... e tutto dovrebbe andare bene.


1

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

In /etc/mysql/my.confè necessario aumentare MySQL interni open_files_limit. 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à troppi errori di file aperti , puoi ripristinare la configurazione predefinita e riavviare MySQL.


questo ha funzionato per me su Ubuntu 16.04, grazie :)
Richard Frank,

0

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

  1. La mia directory di dati è diversa dall'installazione predefinita. Per molteplici ragioni, sia storiche che tecniche.
  2. Stavo aggiornando da un'installazione molto vecchia, che ha attraversato un certo numero di porte back e forward. Al primo avvio di un MySQL 5.5 appena installato, il motore InnoDB non è stato attivato (l'implementazione interna è stata disabilitata nel file di configurazione, ma il plug-in che era disponibile nelle versioni precedenti non è presente in 5.5) e il segno di aggiornamento è stato creato senza effettivamente aggiornare eventuali tavoli.

Dopo aver risolto il problema di InnoDB, 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 è stato in grado di accedere ad alcune tabelle. La tua soluzione alternativa con limiti aumentati ha risolto il resto dei problemi, grazie!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.