Недостаточно ресурсов для 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?
Дэйви
Окна везде.
Филипп Карьер
Сколько таблиц в БД? Похоже, какое-то ограничение дескриптора файла.
Дэйви
85 таблиц в БД.
Филипп Карьер
Информация добавлена ​​в описание.
Филипп Карьер

Ответы:

21

Согласно здесь - «OS кода ошибки 24: Слишком много открытых файлов» , который на одной линии с более общей ошибкой 23 «Недостаточно ресурсов».

Так что кажется, что у вас не хватает файловых дескрипторов. Обычно это проблема / проблема на стороне сервера, либо в MySQL, либо в самой ОС.

Возможно, проверьте / отрегулируйте --open-files-limitнастройки в самом MySQL и посмотрите, поможет ли это.

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

Помимо этого вам, вероятно, придется найти основную причину того, почему на этом конкретном сервере не хватает ресурсов. Что, вероятно, потребует устранения неполадок, отключив как можно больше сервисов / процессов и посмотрев, пройдет ли дамп Затем выясните, кто виноват в том, что потребляет слишком много ресурсов и, возможно, неправильно их освобождает.

techie007
источник
2
--single-транзакция вместо --lock-таблиц работала. Большое спасибо.
Филипп Карьер
Странно, я не использую InnoDB, но он не работает без этого параметра. Я думал, что -single-транзакция имеет отношение только к innoDB.
Филипп Карьер
Ницца. :) Рад, что помог.
techie007
4
--lock-all-tablesтакже работает и не имеет проблем с несогласованностью --single-transactionпри работе с таблицами, отличными от InnoDB.
Freiheit
Просто чтобы уточнить: --single-transactionсилы --lock-tables=off. Не используйте это на нетранзакционных таблицах.
b2ag
6

Можете ли вы попробовать это --single-transactionвместо, --lock-tablesнапример, таблиц InnoDB, и вы не используете таблицы кластеров, и что ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE не произойдут во время дампа? Лучше всего подтвердить, что это нормально с вашей организацией поддержки MySQL, если она у вас есть.

Я пробовал это только на Unix, но в основном, если я пытаюсь использовать БД с 2000 таблицами, это дает сбой с ошибкой, аналогичной вашей, например, я использовал все свои дескрипторы открытого файла.

Davey
источник
+1. Вы работали так же, как techie007, но он ответил первым, поэтому я принимаю его ответ. Для записей я не использую innoDB.
Филипп Карьер
2

Вы можете получить эту ошибку:

MySQL: код ошибки: 24 при использовании LOCK TABLES

... наряду с другими ошибками при обновлении до 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
Grzegorz Brzęczyszczykiewicz
источник