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

sulla verifica l'errore 24 sul guscio si diceTroppi file aperti su Ubuntu 8.04

>>perror 24 

OS error code 24: Too many open files 

Come posso risolvere questo?

risposta

0

Non è possibile garantire che "24" sia un numero di errore a livello di sistema operativo, quindi non presumere che questo significhi che troppi handle di file siano aperti. Potrebbe essere un tipo di codice di errore interno utilizzato all'interno di mysql stesso. Suggerirei di chiedere sulla mailing list di mysql su questo.

+0

Aspetta, ho mentito. In questo caso, 24 probabilmente significa ciò che pensi che significhi. Almeno un'altra persona sembra averlo sperimentato - vedi [questo bug report] (http://bugs.mysql.com/bug.php?id=26114) sul bug tracker mysql, anche se questo è un rapporto piuttosto vecchio . Stai usando mysql 5.0 per caso? –

1

Potrebbe anche essere possibile che con un certo codice che accede alle tabelle vicino a quelli correttamente e in un punto del tempo, il numero di file aperti potrebbe essere raggiunto.

Si prega di fare riferimento a http://dev.mysql.com/doc/refman/5.0/en/table-cache.html per un possibile motivo pure.

Il riavvio di mysql dovrebbe causare l'interruzione del problema (anche se potrebbe verificarsi nuovamente a meno che il problema di fondo non venga risolto).

1

È possibile aumentare i limiti del sistema operativo modificando /etc/security/limits.conf.

È inoltre possibile installare il comando "lsof" (LiSt Open Files) per visualizzare i file < -> Relazione di processi.

2

aggiungere --single_transaction al comando mysqldump

20

In un primo momento, di individuare i limiti determinati utenti o gruppi che devi fare quanto segue:

[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 linea è importante:

file aperti (-n) 1024

Come si può vedere, il fornitore del sistema operativo spedisce questa versione w con la configurazione di base di Linux: 1024 file per processo.

Questo ovviamente non è sufficiente per un'installazione MySQL impegnata.

Ora, per risolvere questo problema è necessario modificare il seguente file:

/etc/security/limits.conf

mysql    soft nofile   24000 
mysql    hard nofile   32000 

Alcune versioni di Linux richiedono anche una configurazione aggiuntiva per ottenere questo attenersi a processi daemon contro sessioni di login. In Ubuntu 10.04, ad esempio, è necessario impostare anche i limiti di sessione pam aggiungendo la seguente riga al /etc/pam.d/common-session:

session required pam_limits.so 
+0

Probabilmente, se '/ etc/pam.d/common-session-noninteractive' esiste, si dovrebbe aggiungere' session required pam_limits.so' anche a questo file. – peppered

+0

Ho riscontrato questo problema esatto con Debian Wheezy + MySQL 5.6. Grazie per la risposta. –

8

Piuttosto una vecchia questione, ma qui ci sono i miei due centesimi.

La cosa che si potrebbe provare è che il motore mysql non ha impostato correttamente la sua variabile "open-files-limit".

Puoi vedere quanti file stai permettendo a mysql di aprire mysql> MOSTRA VARIABILI;

Probabilmente è impostato su 1024 anche se i limiti sono già stati impostati su valori più alti.

È possibile utilizzare l'opzione --open-files-limit = XXXXX nella riga di comando per mysqld.

Cheers

+0

Ho avuto esattamente lo stesso problema in precedenza e questo lo ha risolto per me! +1 per una risposta semplice e intuitiva :-) – gawbul

1

Non è necessario configurare PAM, come penso. Sul mio sistema (Debian 7.2 con Percona 5.5.31-rel30.3-520.squeeze) ho:

Prima my.cnf modifiche:

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

Dopo aver aggiunto "open_files_limit = 4096" nel mio. CNF e riavviare mysqld, ho ottenuto:

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

12345 e 23456 è il processo mysqld PID, ovviamente.

MOSTRA VARIABILI COME 'open_files_limit' mostra 4096 ora.

Tutto sembra ok, mentre "ulimit" non mostrano variazioni:

\# su - mysql -c bash 
\# ulimit -n 
1024 
Problemi correlati