Немає ресурсів для mysqldump


21

Я намагаюся зробити mysqldump на сервері Windows, і я отримую таке повідомлення про помилку :

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

Ось команда, яку я виконую:

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

Перезапуск служби mysql не допомогло.

Я завжди отримую повідомлення за тією ж таблицею.

Я намагався зменшити змінні table_cache та max_connections з 64 до 32 та 30 до 10 відповідно, але я все одно отримую помилку лише цього разу для іншої таблиці (і відтепер повідомлення про помилку завжди згадує другу таблицю).

Цей самий сценарій працює на десятках інших серверів Windows, які мають ту ж базу даних без проблем.

У всіх базах даних є 85 таблиць.


На якій операційній системі працює MySQL?
Davey

Windows скрізь.
Філіпп Кер’єр

Скільки таблиць у БД? Схоже, обмеження дескриптора файлу.
Дейв

85 таблиць у БД.
Філіпп Кер’єр

Інформація, додана до опису.
Філіпп Кер’єр

Відповіді:


21

Згідно з цим - "Код помилки ОС 24: Занадто багато відкритих файлів", який узгоджується з більш загальною помилкою 23 "Без ресурсів".

Тож здається, що у вас не вистачає файлових ручок. Зазвичай це налаштування / проблема на сервері або в MySQL, або в самій ОС.

Можливо, перевірте / відрегулюйте --open-files-limitналаштування в самому MySQL і подивіться, чи це допомагає.

Також, можливо, спробуйте запустити дамп, поки ніхто більше не використовує БД, з --single-transactionналаштуванням замість цього --Lock-File, оскільки декілька людей припускають, що це буде працювати по одній таблиці за один раз, а не відкривати їх усі одразу (тому використовуйте меншу кількість файлових ручок).

Крім цього вам, мабуть, доведеться знайти першопричину того, чому саме на цьому сервері не вистачає ресурсів. Що, ймовірно, стосуватиметься усунення несправностей, відключивши якомога більше служб / процесів і побачити, чи проходить дамп. Тоді з’ясуйте, хто винуватець у тому, що їсте занадто багато ресурсів і, можливо, не вивільняє їх правильно.


2
--rading-транзакції замість --lock-таблиць працювали. Дуже дякую.
Філіпп Кер’єр

Як не дивно, я не використовую InnoDB, але він не працює без цього параметра. Я подумав - що одиночна транзакція стосується лише невідомих даних.
Філіпп Кер’єр

Приємно. :) Рада, що це допомогло.
techie007

4
--lock-all-tablesтакож працює і не має проблем з неузгодженістю під --single-transactionчас роботи над таблицями, які не є InnoDB.
freiheit

Просто для уточнення: --single-transactionсили --lock-tables=off. Не використовуйте це для не транзакційних таблиць.
b2ag

6

Чи можете ви спробувати це --single-transactionзамість, --lock-tablesнаприклад, таблиці є InnoDB, і ви не використовуєте таблиці кластерів, і що НАПРАВЛЯЄТЬСЯ ТАБЛИЦІ, ТАБЛИВАЛЬНОГО ТАБЛИЦЯ, ТАБЛИЦЯ ОЗНАЧЕННЯ, ТРУНКТАЦІЙНА ТАБЛИЦЯ не буде відбуватися під час демпінгу? Найкраще підтвердіть, що це нормально, якщо ваша організація підтримки MySQL не працює.

Я пробував це лише на unix, але в основному, якщо я намагаюся з БД з 2000 таблицями, він не спрацьовує з помилкою, подібною до вашої, наприклад, я використовував усі мої відкриті файли.


+1. Ви вирішили бути таким же, як techie007 також працював, але він відповів першим, тому я приймаю його відповідь. Для записів я не використовую innoDB.
Філіпп Кер’єр

2

Ви можете отримати цю помилку:

MySQL: Помилка: 24 при використанні ТАБЛИЦІ БЛОКУВАННЯ

... разом з іншими помилками під час оновлення до MySQL 5.5 та запуску резервних копій на Plesk або будь-якій іншій ОС, що виконується mysqldump.

Виправити:

  1. Редагувати my.cnf
  2. Додати:

    open_files_limit=2048
    
  3. Перезавантажте MySQL

Якщо ви отримуєте:

Неможливо завантажити з mysql.proc. Таблиця, ймовірно, пошкоджена (1548)

Це результат оновлення до 5.5. Виконати:

mysql_upgrade --force

Тестував і працював над CentOS 6.7 та Plesk 12.


0

У мене була подібна проблема, як у Філіпе. Коли я запускаю дамп, я побачив помилку:

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

Я використовував просту команду:

mysqldump -uroot -p c1baznarz > c1baznarz.sql

Отже, я додаю ще одну команду до свого mysqldump:

--single-transaction

і смітник готовий. Отже, мій весь запит mysqldump виглядає так:

mysqldump -uroot -p --lock-tables --single-transaction c1baznarz > c1baznarz.sql
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.