Brak zasobów dla mysqldump

21

Próbuję zrobić mysqldump na serwerze Windows i pojawia się następujący komunikat o błędzie :

mysqldump: Got error: 23: Out of resources when opening file '.\db\sometable.MYD' (Errcode: 24) when using LOCK TABLES

Oto polecenie, które uruchamiam:

mysqldump -u user -p"pass" --lock-tables --default-character-set=latin1 -e --quick databasename > "query.sql"

Ponowne uruchomienie usługi mysql nie pomogło.

Zawsze otrzymuję wiadomość dla tego samego stołu.

Próbowałem zmniejszyć zmienne table_cache i max_connections odpowiednio z 64 do 32 i 30 do 10, ale nadal otrzymuję błąd tylko tym razem dla innej tabeli (i odtąd komunikat o błędzie zawsze wspomina o drugiej tabeli).

Ten sam skrypt działa bez problemu na kilkunastu innych serwerach Windows posiadających tę samą bazę danych.

Wszystkie bazy danych mają 85 tabel.

Philippe Carriere
źródło
Na jakim systemie operacyjnym działa MySQL?
davey,
Windows wszędzie.
Philippe Carriere,
Ile tabel w DB? Wygląda jak pewien limit deskryptorów plików.
davey,
85 tabel w DB.
Philippe Carriere,
Informacje dodane do opisu.
Philippe Carriere,

Odpowiedzi:

21

Zgodnie z tym - „Kod błędu systemu operacyjnego 24: Zbyt wiele otwartych plików”, co odpowiada bardziej ogólnemu błędowi 23 „Brak zasobów”.

Wygląda więc na to, że brakuje Ci uchwytów plików. Zazwyczaj jest to ustawienie / problem po stronie serwera, albo w MySQL, albo w samym systemie operacyjnym.

Być może sprawdź / dostosuj --open-files-limitustawienie w samym MySQL i sprawdź, czy to pomoże.

Być może spróbuj uruchomić zrzut, podczas gdy nikt inny nie korzysta z DB, z --single-transactionustawieniem zamiast --Lock-File, ponieważ kilka osób sugeruje, że będzie to działało pojedynczo, zamiast otwierać je wszystkie naraz (w ten sposób używając mniej uchwytów plików).

Poza tym prawdopodobnie będziesz musiał znaleźć podstawową przyczynę, dlaczego w tym konkretnym serwerze brakuje zasobów. Co prawdopodobnie wiązałoby się z rozwiązywaniem problemów poprzez wyłączenie jak największej liczby usług / procesów i sprawdzenie, czy zrzut zostanie wykonany. Następnie dowiedz się, kto jest winowajcą, który zjada zbyt wiele zasobów i być może nie uwalnia ich prawidłowo.

techie007
źródło
2
- Pojedyncza transakcja zamiast --lock-tabele działały. Wielkie dzięki.
Philippe Carriere
O dziwo nie używam InnoDB, ale nie działa bez tego parametru. Pomyślałem, że jedna transakcja dotyczy tylko innoDB.
Philippe Carriere
Miły. :) Cieszę się, że to pomogło.
techie007
4
--lock-all-tablesdziała również i nie ma problemów z niespójnością --single-transactionpodczas pracy na tabelach innych niż InnoDB.
freiheit
Żeby wyjaśnić: --single-transactionsiły --lock-tables=off. Nie używaj tego w tabelach nietransakcyjnych.
b2ag
6

Czy jesteś w stanie wypróbować --single-transactionzamiast --lock-tablesnp. Tabele to InnoDB i nie używasz tabel Cluster, a ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE nie wystąpi podczas zrzutu? Najlepiej potwierdź, że jest to w porządku z organizacją wspierającą MySQL, jeśli taką masz.

Próbowałem tego tylko na Uniksie, ale w zasadzie, jeśli spróbuję z DB z tabelami 2000, to nie powiedzie się z błędem podobnym do twojego, np. Użyłem wszystkich moich otwartych uchwytów plików.

davey
źródło
+1. Twoje rozwiązanie jest takie samo jak techie007, ale zadziałało najpierw, więc akceptuję jego odpowiedź. Dla przypomnienia nie używam innoDB.
Philippe Carriere
2

Możesz otrzymać ten błąd:

MySQL: Errcode: 24 podczas korzystania z LOCK TABLES

... wraz z innymi błędami podczas aktualizacji do MySQL 5.5 i uruchamiania kopii zapasowych w Plesk lub innym uruchomionym systemie operacyjnym mysqldump.

Naprawić:

  1. Edytować my.cnf
  2. Dodaj:

    open_files_limit=2048
    
  3. Uruchom ponownie MySQL

Jeśli otrzymujesz:

Nie można załadować z mysql.proc. Tabela jest prawdopodobnie uszkodzona (1548)

Jest to wynikiem aktualizacji do wersji 5.5. Wykonać:

mysql_upgrade --force

Testowane i działające na CentOS 6.7 i Plesk 12.

Marcos Paulino Chahin
źródło
0

Miałem podobny problem jak Philipe. Po uruchomieniu zrzutu zobaczyłem taki błąd:

mysqldump: Got error: 23: Out of resources when opening file './c1baznarz/timecard.MYD' (Errcode: 24) when using LOCK TABLES

Użyłem prostej komendy:

mysqldump -uroot -p c1baznarz > c1baznarz.sql

Dodam więc kolejne polecenie do mojego mysqldump:

--single-transaction

i zrzut jest gotowy. Tak więc moje całe zapytanie mysqldump wygląda następująco:

mysqldump -uroot -p --lock-tables --single-transaction c1baznarz > c1baznarz.sql
Grzegorz Brzęczyszczykiewicz
źródło