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.


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.


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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.