1114 (HY000): стол заполнен


114

Я пытаюсь добавить строку в InnoDBтаблицу простым запросом:

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');

Но когда я пытаюсь выполнить этот запрос, я получаю следующее:

ОШИБКА 1114 (HY000): таблица zip_codesзаполнена

Делая

SELECT COUNT(*) FROM zip_codes

дает мне 188 959 строк, что не кажется слишком большим, учитывая, что у меня есть другая таблица с 810 635 строками в той же базе данных.

Я довольно неопытен в использовании InnoDB engineи никогда не сталкивался с этой проблемой MyISAM. Какие здесь потенциальные проблемы?

РЕДАКТИРОВАТЬ: это происходит только при добавлении строки в zip_codesтаблицу.


Ошибка возникает при попытке вставить в любую таблицу, или только в zip_codes?
Чад Берч

Ответы:


92

РЕДАКТИРОВАТЬ: сначала проверьте, не закончилось ли у вас дисковое пространство, прежде чем переходить к разрешению, связанному с конфигурацией.

Кажется, у вас слишком низкий максимальный размер для innodb_data_file_pathвашего my.cnf, В этом примере

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

вы не можете разместить более 512 МБ данных во всех таблицах innodb вместе взятых.

Возможно, вам стоит перейти на схему innodb-per-table с использованием innodb_file_per_table.


C, откуда мы получаем этот файл my.cnf в ubuntu

3
@Nadh В Ubuntu 16.04 он является частью /etc/mysql/и частично разделен на дополнительные файлы в/etc/mysql/conf.d
Мартин С.

Шахта работала после добавления innodb_data_file_pathстроки в /etc/mysql/mysql.conf.d/mysqld.cnfи перезапуска mysqlи apache2 услуги
Timmah

81

Другая возможная причина - переполнение раздела - именно это и случилось со мной сейчас.


1
Это всегда нужно проверять в первую очередь. Всегда возвращайтесь к шнуру питания, я сталкивался с этим много раз.
Стивен Черч,

1
Вы сэкономили мне несколько часов, пытаясь изменить конфигурацию mysql. Первичный раздел был заполнен. Пришлось переместить базу данных mysql в раздел данных, а затем создать мягкую ссылку
Ганеш Кришнан

2
использовать df -hдля проверки размера диска
Амит Бера

25

Вы также получите ту же ошибку ERROR 1114 (HY000): Таблица '# sql-310a_8867d7f' заполнена

если вы попытаетесь добавить индекс к таблице, которая использует механизм хранения MEMORY.


Это случилось со мной, но мне показалось, что мой клиент использовал неправильный синтаксис. При добавлении того же индекса с простым ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);сработало.
thephper

22

Вам необходимо изменить ограничение, установленное в my.cnf для таблиц INNO_DB. Этот предел памяти не установлен для отдельных таблиц, он установлен для всех таблиц вместе.

Если вы хотите, чтобы память автоматически увеличивалась до 512 МБ

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

Если вы не знаете лимит или не хотите устанавливать лимит, вы можете изменить его следующим образом

innodb_data_file_path = ibdata1:10M:autoextend

Мы разместили наш ddbb на Amazon, и он был настроен с автоматическим расширением. Но у нас была та же проблема, которая, как я предполагаю, была связана с достижением настроенного сохраненного лимита
borjab

12

Эта ошибка также появляется, если раздел, на котором он tmpdirнаходится, заполняется (из-за изменения таблицы или другого


11

В моем случае это произошло из-за того, что раздел, на котором размещен файл ibdata1, был заполнен.


10

Возможно, у вас не хватает места либо в разделе, где хранятся таблицы mysql (обычно / var / lib / mysql), либо в том, где хранятся временные таблицы (обычно / tmp).

Вы можете захотеть: - контролировать свободное пространство во время создания индекса. - укажите переменную MySQL tmpdir в другое место. Это требует перезапуска сервера.


8

Я тоже столкнулся с этой ошибкой при импорте файла базы данных sql размером 8 ГБ. Проверил мой установочный диск mysql. На диске не осталось места. Итак, я получил немного места, удалив ненужные элементы и повторно выполнив команду импорта базы данных. На этот раз все прошло успешно.


7

Если вы используете NDBCLUSTER в качестве механизма хранения, вам следует увеличить DataMemoryи IndexMemory.

Mysql FQA


6

Если вы не включили эту innodb_file_per_tableопцию, InnoDBвсе данные хранятся в одном файле, который обычно называется ibdata1.

Проверьте размер этого файла и убедитесь, что у вас достаточно места на диске, на котором он находится.


5

у нас было: SQLSTATE [HY000]: Общая ошибка: 1114 Таблица 'catalog_product_index_price_bundle_sel_tmp' заполнена

решено:

редактировать конфигурацию db:

нано /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • перезапустить БД

1
Те настройки 512M опасны. Они контролируют максимальный размер памяти для временных таблиц в сложных выборках. Это не только «на соединение», но также «на таблицу tmp». Таким образом, эти значения могут легко привести к нехватке оперативной памяти.
Рик Джеймс

5

ПОЛЬЗОВАТЕЛИ ДОКЕРА: это также происходит, когда вы достигли примерно 90% предельного размера образа Docker (кажется, для кеширования требуется 10% или около того). Формулировка сбивает с толку, поскольку это просто означает объем дискового пространства, который Docker может использовать практически для всего.

Чтобы исправить это, перейдите в настройки рабочего стола Docker> Диск> переместите ползунок немного вправо> Применить.

введите описание изображения здесь


4

Процитируем документы MySQL.

Механизм хранения InnoDB поддерживает таблицы InnoDB в табличном пространстве, которое может быть создано из нескольких файлов. Это позволяет таблице превышать максимальный размер отдельного файла. Табличное пространство может включать в себя необработанные разделы диска, что позволяет создавать очень большие таблицы. Максимальный размер табличного пространства - 64 ТБ.

Если вы используете таблицы InnoDB и у вас закончилось место в табличном пространстве InnoDB. В этом случае решение состоит в расширении табличного пространства InnoDB. См. Раздел 13.2.5, [«Добавление, удаление или изменение размера файлов данных и журналов InnoDB».]


4

в моем случае это просто потому, что сервер mysql работает вместе с приложением, которое записывает слишком много журналов, что диск заполнен.

вы можете проверить, достаточно ли места на диске

df -h

если процент использования диска составляет 100%, вы можете использовать эту команду, чтобы определить, какой каталог слишком велик

du -h -d 1 /

2

В CentOS 7 для меня это исправило просто остановка и запуск службы MySQL.

sudo service mysql stop

sudo service mysql start


Как ни странно, это сработало и для меня .... Не было никаких разделов, заполненных более чем на 80%, и простой перезапуск исправил это.
n0nag0n

2

Я столкнулся с той же проблемой из-за нехватки места на диске. И раздел, на котором размещен файл ibdata1, который является системным табличным пространством для инфраструктуры InnoDB, был заполнен.


2

У меня возникла эта проблема ... в моем случае на моем выделенном сервере закончилось место для хранения. Проверьте это, если все остальное не удается, и рассмотрите возможность увеличения дискового пространства или удаления ненужных данных или файлов.


1

В моем случае память сервера была заполнена, поэтому БД не могла записать временные данные. Чтобы решить эту проблему, вам просто нужно освободить место на диске.


1

Я исправил эту проблему, увеличив объем памяти, доступной бродячей виртуальной машине, где находилась база данных.


1

В моем случае я пытался запустить команду alter table, и доступное дисковое пространство было меньше размера таблицы. Как только я увеличил дисковое пространство, проблема исчезла.



-1

Это также может быть предел InnoDB для количества открытых транзакций:

http://bugs.mysql.com/bug.php?id=26590

при 1024 транзакциях, которые имеют записи отмены (например, редактировали любые данные), InnoDB не будет работать


ответ устарел.
Эван Кэрролл,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.