Keine Ressourcen für mysqldump

21

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.

Philippe Carriere
quelle
Auf welchem ​​Betriebssystem läuft MySQL?
Davey
Windows überall.
Philippe Carriere
Wie viele Tabellen in der DB? Scheint eine Art Dateideskriptorlimit zu haben.
Davey
85 Tabellen in der DB.
Philippe Carriere
Informationen zur Beschreibung hinzugefügt.
Philippe Carriere

Antworten:

20

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-limitEinstellung 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-transactionEinstellung 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.

techie007
quelle
2
--single-transaction statt --lock-tables hat funktioniert. Vielen Dank.
Philippe Carriere
Seltsamerweise verwende ich InnoDB nicht, aber es funktioniert nicht ohne diesen Parameter. Ich dachte, eine einzige Transaktion sei nur bei innoDB relevant.
Philippe Carriere
Nett. :) Ich bin froh, dass es geholfen hat.
Techie007
4
--lock-all-tablesfunktioniert auch und hat nicht die Inkonsistenzprobleme von --single-transactionNicht-InnoDB-Tabellen.
freiheit
Nur zur Verdeutlichung: --single-transactionKräfte --lock-tables=off. Verwenden Sie dies nicht für nicht-transaktionale Tabellen.
b2ag
6

Sind Sie in der Lage, es mit InnoDB --single-transactionanstelle von --lock-tablesbeispielsweise 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.

Davey
quelle
+1. Ihre Lösung, die mit techie007 identisch ist, hat auch funktioniert, aber er hat zuerst geantwortet, sodass ich seine Antwort akzeptiere. Für die Aufzeichnungen verwende ich nicht innoDB.
Philippe Carriere
2

Möglicherweise erhalten Sie folgende Fehlermeldung:

MySQL: Errcode: 24 bei Verwendung von LOCK TABLES

... 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:

  1. Bearbeiten my.cnf
  2. Hinzufügen:

    open_files_limit=2048
    
  3. Starten Sie MySQL neu

Wenn Sie erhalten:

Kann nicht von mysql.proc geladen werden. Die Tabelle ist wahrscheinlich beschädigt (1548)

Dies ist das Ergebnis eines Upgrades auf 5.5. Ausführen:

mysql_upgrade --force

Getestet und gearbeitet auf CentOS 6.7 und Plesk 12.

Marcos Paulino Chahin
quelle
0

Ich hatte ein ähnliches Problem wie Philipe. Als ich 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 den einfachen Befehl verwendet:

mysqldump -uroot -p c1baznarz > c1baznarz.sql

Also füge ich meinem mysqldump einen weiteren Befehl hinzu:

--single-transaction

und Dump ist fertig. Meine gesamte mysqldump-Abfrage sieht also so aus:

mysqldump -uroot -p --lock-tables --single-transaction c1baznarz > c1baznarz.sql
Grzegorz Brzęczyszczykiewicz
quelle