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

auf die Überprüfung der Fehler 24 auf der Schale sagt, esZu viele offene Fehler Dateien auf Ubuntu 8.04

>>perror 24 

OS error code 24: Too many open files 

wie kann ich dieses Problem lösen?

Antwort

0

Es kann nicht garantiert werden, dass "24" eine Fehlernummer auf Betriebssystemebene ist. Gehen Sie also nicht davon aus, dass zu viele Dateizugriffsnummern geöffnet sind. Es könnte eine Art interner Fehlercode sein, der in mysql selbst verwendet wird. Ich würde vorschlagen, auf den MySQL-Mailinglisten darüber zu fragen.

+0

Warten, log ich. In diesem Fall bedeutet 24 wahrscheinlich, was Sie denken, dass es bedeutet. Mindestens eine andere Person scheint dies bereits erlebt zu haben - siehe [Fehlerbericht] (http://bugs.mysql.com/bug.php?id=26114) auf dem mysql bug tracker, obwohl dies ein ziemlich alter Bericht ist . Verwenden Sie zufällig mysql 5.0? –

1

Es könnte auch möglich sein, dass durch einen Code, der auf die Tabellen zugreift, dint diese nicht korrekt schließt und über einen bestimmten Zeitpunkt die Anzahl der geöffneten Dateien erreicht werden kann.

Bitte aus einem möglichen Grund auch auf http://dev.mysql.com/doc/refman/5.0/en/table-cache.html beziehen.

Neustart von mysql sollte dazu führen, dass dieses Problem verschwindet (obwohl es wieder vorkommen kann, wenn das zugrunde liegende Problem behoben ist).

1

Sie können die Grenzen Ihres Betriebssystems erhöhen, indem Sie /etc/security/limits.conf bearbeiten.

Sie können auch den Befehl "lsof" (LiSt Open Files) installieren, um die Dateien < -> Prozesse relation anzuzeigen.

2

--single_transaction zu Ihrem mysqldump Befehl hinzufügen

20

Zuerst die bestimmte Benutzer oder eine Gruppe Grenzen identifizieren Sie Folgendes tun:

[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]:~$ 

Die wichtige Zeile ist:

Geöffnete Dateien (-n) 1024

Wie Sie sehen können, wird Ihr Betriebssystemanbieter diese Version w Mit der grundlegenden Linux-Konfiguration - 1024 Dateien pro Prozess.

Dies ist offensichtlich nicht genug für eine geschäftige MySQL-Installation.

Nun, um dieses Problem beheben Sie die folgende Datei zu ändern haben:

/etc/security/limits.conf

mysql    soft nofile   24000 
mysql    hard nofile   32000 

Einige Varianten von Linux erfordern auch zusätzliche Konfiguration dies zu bleiben zu erhalten Daemon-Prozesse versus Anmeldesitzungen. In Ubuntu 10.04, zum Beispiel, müssen Sie auch die pam Sitzung Grenzen setzen, indem Sie die folgende Zeile in /etc/pam.d/common-session Zugabe:

session required pam_limits.so 
+0

Wenn "/ etc/pam.d/common-session-noninteractive" vorhanden ist, sollten Sie 'session pam_limits.so' ebenfalls an diese Datei anhängen. – peppered

+0

Ich habe genau dieses Problem mit Debian Wheezy + MySQL 5.6 erlebt. Danke für die Antwort. –

8

Ganz eine alte Frage, aber hier sind meine zwei Cent.

Die Sache, die Sie möglicherweise feststellen, ist, dass die MySQL-Engine nicht die Variable "open-files-limit" richtig gesetzt hat.

Sie können sehen, wie viele Dateien Sie erlauben, mysql zu öffnen mysql> SHOW VARIABLES;

Wahrscheinlich ist auf 1024 gesetzt, auch wenn Sie die Grenzen bereits auf höhere Werte setzen.

Sie können die Option --open-files-limit = XXXXX in der Befehlszeile für mysqld verwenden.

Prost

+0

Ich hatte vorher genau das gleiche Problem und das hat es für mich gelöst! +1 für einfache, benutzerfreundliche Antwort :-) – gawbul

1

Es gibt keine Notwendigkeit, PAM zu konfigurieren, wie ich denke. Auf meinem System (Debian 7.2 mit Percona 5.5.31-rel30.3-520.squeeze) Ich habe:

Vor my.cnf Änderungen:

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

Nach der Zugabe von "open_files_limit = 4096" in meine. CNF und mysqld restart, ich habe:

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

12345 und 23456 ist mysqld-Prozess PID, natürlich.

VARIABLEN ZEIGEN wie 'open_files_limit' Zeige 4096 jetzt.

All ok sieht, während "ulimit" zeigen keine Veränderungen:

\# su - mysql -c bash 
\# ulimit -n 
1024 
Verwandte Themen