Wenn Sie den Fehler ERROR '...' not found (errno:
23)
, Can't open file: ... (errno:
24)
oder einen anderen Fehler mit der errno
23
oder errno 24
von MySQL gemeldet
bekommen, haben Sie nicht genügend Dateideskriptoren für den
MySQL Server zugewiesen. Das Dienstprogramm
perror verrät Ihnen, was welche Fehlernummer
bedeutet:
shell>perror 23
Error code 23: File table overflow shell>perror 24
Error code 24: Too many open files shell>perror 11
Error code 11: Resource temporarily unavailable
Das Problem hierbei ist, dass mysqld versucht, zu viele Dateien gleichzeitig geöffnet zu halten. Sie können entweder mysqld veranlassen, nicht so viele Dateien zugleich zu öffnen, oder die Anzahl der für mysqld verfügbaren Dateideskriptoren erhöhen.
Damit mysqld weniger Dateien zugleich offen
behält, können Sie den Tabellen-Cache verkleinern, indem Sie
den Wert der Systemvariablen table_open_cache
heruntersetzen (ihr Standardwert ist 64). Wenn Sie die
max_connections
vermindern, vermindern Sie in
einem auch die Anzahl der offenen Dateien (der Standardwert
beträgt 100).
Die Anzahl der für mysqld verfügbaren
Dateideskriptoren ändern Sie mit der Option
--open-files-limit
für
mysqld_safe, oder Sie setzen (seit MySQL
3.23.30) die Systemvariable open_files_limit
.
Siehe Abschnitt 5.2.2, „Server-Systemvariablen“. Am einfachsten
können Sie diese Werte ändern, indem Sie eine Option in Ihrer
Optionsdatei einstellen. Siehe Abschnitt 4.3.2, „my.cnf-Optionsdateien“.
Wenn Sie eine ältere Version von mysqld
verwenden, in der sich die Höchstzahl der offenen Dateien nicht
einstellen lässt, können Sie das Skript
mysqld_safe bearbeiten. Dort gibt es eine
auskommentierte Zeile mit dem Inhalt ulimit -n
256. Daraus entfernen Sie das Kommentarzeichen
‘#
’ und stellen die Zahl
256
auf die Anzahl der gewünschten
Dateideskriptoren um, die mysqld zur
Verfügung stehen sollen.
--open-files-limit
und
ulimit können zwar die Anzahl der
Dateideskriptoren erhöhen, aber nur bis zu dem Limit, das für
Ihr Betriebssystem zulässig ist. Außerdem gibt es ein
„hartes“ Limit, das nur überschrieben werden kann,
wenn Sie mysqld_safe oder
mysqld als root
starten
(denken Sie aber daran, in diesem Fall den Server mit der
--user
-Option zu starten, damit er nicht nach
dem Hochfahren als root
weiterläuft). Wenn
Sie das Betriebssystemlimit für die Anzahl der
Dateideskriptoren, die für jeden Prozess verfügbar sind,
ändern möchten, müssen Sie in Ihre Systemdokumentation
schauen.
Hinweis: Wenn Sie die tcsh-Shell ausführen, funktioniert ulimit nicht! Außerdem meldet tcsh verkehrte Werte, wenn Sie nach den aktuellen Limits fragen. In diesem Fall sollten Sie mysqld_safe mit sh starten.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.