Ich versuche einen mysqldump auf einemWindowsServer und ich erhalte folgendesFehlermeldung:
mysqldump: Got error: 23: Out of resources when opening file '.\db\sometable.MYD' (Errcode: 24) when using LOCK TABLES
Hier ist dieBefehlIch renne :
mysqldump -u user -p"pass" --lock-tables --default-character-set=latin1 -e --quick databasename > "query.sql"
Ein Neustart des MySQL-Dienstes hat nicht geholfen.
Ich erhalte die Meldung immer für dieselbe Tabelle.
Ich habe versucht, dieTabellencacheUndMax_VerbindungenVariablen von 64 auf 32 und von 30 auf 10, aber ich erhalte den Fehler immer noch, nur dieses Mal für eine andere Tabelle (und von nun an bezieht sich die Fehlermeldung immer auf die zweite Tabelle).
Das gleiche Skript läuft auf einem Dutzend andererWindowsServer mit derselben Datenbank ohne Probleme.
Alle Datenbanken haben 85 Tabellen.
Antwort1
EntsprechendHier- „Betriebssystemfehlercode 24: Zu viele geöffnete Dateien“, was mit dem allgemeineren Fehler 23 „Keine Ressourcen mehr“ übereinstimmt.
Es scheint also, als ob Ihnen die Dateihandles ausgehen. Dies ist normalerweise eine Einstellung/ein Problem auf der Serverseite, entweder in MySQL oder im Betriebssystem selbst.
Überprüfen/justieren Sie ggf.--open-files-limit
Einstellungin MySQL selbst und sehen Sie, ob das hilft.
Versuchen Sie auch, den Dump auszuführen, während niemand sonst die Datenbank verwendet, mit dem--single-transaction
Einstellunganstelle von --Lock-File
, da dies, wie von mehreren Personen vorgeschlagen, mit einer Tabelle nach der anderen funktioniert, anstatt sie alle auf einmal zu öffnen (und daher weniger Dateihandles zu verwenden).
Darüber hinaus müssen Sie wahrscheinlich die Grundursache dafür finden, warum diesem bestimmten Server die Ressourcen ausgehen. Dazu müssten Sie wahrscheinlich so viele Dienste/Prozesse wie möglich deaktivieren und prüfen, ob der Dump erfolgreich ist. Finden Sie dann heraus, wer der Schuldige ist, der zu viele Ressourcen verbraucht und sie möglicherweise nicht richtig freigibt.
Antwort2
Können Sie es mit versuchen, --single-transaction
anstatt --lock-tables
z. B. dass die Tabellen InnoDB sind und Sie keine Cluster-Tabellen verwenden und dass ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE während des Dumps nicht vorkommen? Bestätigen Sie am besten bei Ihrer MySQL-Supportorganisation, falls Sie eine haben, dass dies in Ordnung ist.
Ich habe dies nur unter Unix versucht, aber grundsätzlich schlägt es mit einem ähnlichen Fehler wie Ihrem fehl, wenn ich es mit einer Datenbank mit 2000 Tabellen versuche, z. B. habe ich alle meine offenen Dateihandles verwendet.
Antwort3
Möglicherweise wird folgender Fehler angezeigt:
MySQL: Fehlercode: 24 bei Verwendung von LOCK TABLES
... zusammen mit anderen Fehlern, wenn Sie auf MySQL 5.5 aktualisieren und Ihre Backups auf Plesk oder einem anderen Betriebssystem ausführen mysqldump
.
Reparieren:
- Bearbeiten
my.cnf
Hinzufügen:
open_files_limit=2048
Starten Sie MySQL neu
Wenn Sie Folgendes erhalten:
Kann nicht von mysql.proc geladen werden. Die Tabelle ist wahrscheinlich beschädigt (1548)
Dies ist das Ergebnis eines Upgrades auf 5.5. Führen Sie Folgendes aus:
mysql_upgrade --force
Getestet und funktionierte auf CentOS 6.7 und Plesk 12.
Antwort4
Ich hatte ein ähnliches Problem wie Philipe. Als ich den Dump startete, sah ich einen Fehler wie diesen:
mysqldump: Got error: 23: Out of resources when opening file './c1baznarz/timecard.MYD' (Errcode: 24) when using LOCK TABLES
Ich habe einen einfachen Befehl verwendet:
mysqldump -uroot -p c1baznarz > c1baznarz.sql
Also füge ich meinem mysqldump einen weiteren Befehl hinzu:
--single-transaction
und der Dump ist fertig. Meine mysqldump-Abfrage sieht also folgendermaßen aus:
mysqldump -uroot -p --lock-tables --single-transaction c1baznarz > c1baznarz.sql