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таблицу.

Wickethewok
источник
Ошибка возникает при попытке вставить в любую таблицу, или только в 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

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

maaartinus
источник
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
Даниэль Лука ЧистыйUnicorn
источник
Мы разместили наш ddbb на Amazon, и он был настроен с автоматическим расширением. Но у нас была та же проблема, которая, как я предполагаю, была связана с достижением настроенного сохраненного лимита
borjab
12

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

fimbulvetr
источник
11

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

skiphoppy
источник
10

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

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

Julio
источник
8

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

Арун Кумар
источник
7

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

Mysql FQA

метдо
источник
6

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

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

Quassnoi
источник
5

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

решено:

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

нано /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

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

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

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

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

SliQ
источник
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

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

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

Савендра Эканаяке
источник
2

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

NotJay
источник
1

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

Пьер-Ив Гийме
источник
1

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

Иволошин
источник
1

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

Pratik Singhal
источник
1

Этот диск заполнен в / var / www / mysql

Укун
источник
-1

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

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

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


источник
ответ устарел.
Эван Кэрролл,