Ich versuche einen mysqldump auf einem Windows Server durchzuführen und bekomme folgende Fehlermeldung :
mysqldump: Got error: 23: Out of resources when opening file '.\db\sometable.MYD' (Errcode: 24) when using LOCK TABLES
Hier ist der Befehl, den ich ausführe:
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 bekomme immer die Nachricht für den gleichen Tisch.
Ich habe versucht, die Variablen table_cache und max_connections von 64 auf 32 bzw. 30 auf 10 zu reduzieren, aber ich erhalte immer noch den Fehler nur dieses Mal für eine andere Tabelle (und von nun an wird in der Fehlermeldung immer die zweite Tabelle erwähnt).
Dasselbe Skript wird ohne Probleme auf einem Dutzend anderer Windows- Server mit derselben Datenbank ausgeführt.
Alle Datenbanken haben 85 Tabellen.
Antworten:
Laut hier - "OS Fehlercode 24: Zu viele offene Dateien", was mit dem allgemeineren Fehler 23 "Out of resources" übereinstimmt.
Es sieht also so aus, als ob Ihnen die Dateizugriffsnummern ausgehen. Dies ist normalerweise eine Einstellung / ein Problem auf dem Server, entweder in MySQL oder im Betriebssystem selbst.
Vielleicht überprüfe / passe die
--open-files-limit
Einstellung in MySQL selbst an und finde heraus, ob das hilft.Versuchen Sie auch, den Speicherauszug auszuführen, während kein anderer Benutzer die Datenbank mit der
--single-transaction
Einstellung anstelle von verwendet--Lock-File
, da mehrere Personen vorschlagen, dass dies jeweils für eine Tabelle funktioniert, anstatt sie alle gleichzeitig zu öffnen (daher werden weniger Dateihandles verwendet).Darüber hinaus müssen Sie wahrscheinlich eine Ursache dafür finden, warum auf diesem bestimmten Server die Ressourcen ausgehen. Dies würde wahrscheinlich die Fehlerbehebung beinhalten, indem so viele Dienste / Prozesse wie möglich deaktiviert werden und geprüft wird, ob der Speicherauszug durchläuft. Finden Sie dann heraus, wer der Schuldige ist, der zu viele Ressourcen frisst und sie möglicherweise nicht richtig freisetzt.
quelle
--lock-all-tables
funktioniert auch und hat nicht die Inkonsistenzprobleme von--single-transaction
Nicht-InnoDB-Tabellen.--single-transaction
Kräfte--lock-tables=off
. Verwenden Sie dies nicht für nicht-transaktionale Tabellen.Sind Sie in der Lage, es mit InnoDB
--single-transaction
anstelle von--lock-tables
beispielsweise zu versuchen, und Sie verwenden keine Clustertabellen, und ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE werden während des Dumps nicht auftreten? Bestätigen Sie am besten, dass dies mit Ihrer MySQL-Support-Organisation in Ordnung ist, falls Sie eine haben.Ich habe dies nur unter Unix ausprobiert, aber wenn ich es mit einer Datenbank mit 2000 Tabellen versuche, schlägt dies mit einer ähnlichen Fehlermeldung wie Ihrer fehl. Ich habe beispielsweise alle meine offenen Datei-Handles verwendet.
quelle
Möglicherweise erhalten Sie folgende Fehlermeldung:
... zusammen mit anderen Fehlern, wenn Sie ein Upgrade auf MySQL 5.5 durchführen und Ihre Backups auf Plesk oder einem anderen Betriebssystem ausführen
mysqldump
.Reparieren:
my.cnf
Hinzufügen:
Starten Sie MySQL neu
Wenn Sie erhalten:
Dies ist das Ergebnis eines Upgrades auf 5.5. Ausführen:
Getestet und gearbeitet auf CentOS 6.7 und Plesk 12.
quelle
Ich hatte ein ähnliches Problem wie Philipe. Als ich Dump startete, sah ich einen Fehler wie diesen:
Ich habe den einfachen Befehl verwendet:
Also füge ich meinem mysqldump einen weiteren Befehl hinzu:
und Dump ist fertig. Meine gesamte mysqldump-Abfrage sieht also so aus:
quelle