1114 (HY000): Стіл заповнений


114

Я намагаюся додати рядок до InnoDBтаблиці просто запитом:

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

Але при спробі цього запиту я отримую таке:

ПОМИЛКА 1114 (HY000): Таблиця zip_codesзаповнена

Робити a

SELECT COUNT(*) FROM zip_codes

дає мені 188,959 рядків, що не здається занадто великим, враховуючи, що я маю ще одну таблицю з 810 635 рядками в тій самій базі даних.

Я досить недосвідчений із InnoDB engineпроблемою і ніколи не стикався з цим питанням MyISAM. Які тут є деякі потенційні проблеми?

EDIT: Це відбувається лише при додаванні рядка до zip_codesтаблиці.


Чи виникає помилка, коли ви намагаєтеся вставити будь-яку таблицю або лише поштові коди?
Береза ​​Чад

Відповіді:


92

РЕДАКТУВАННЯ: Спочатку перевірте, чи не вистачає місця на диску, перш ніж вирішити рішення, пов’язане з конфігурацією.

Ви, здається, маєте занадто низький максимальний розмір для innodb_data_file_pathсвого my.cnf, у цьому прикладі

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

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

Можливо, вам слід перейти до схеми innodb за таблицею, використовуючи 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для перевірки розміру диска
Amit Bera

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знаходиться, заповнюється (через таблицю alter або інше)


11

У моєму випадку це було тому, що розділ, на якому розміщено файл ibdata1, був заповнений.


10

Можливо, у вас не вистачає місця або в розділі, де зберігаються таблиці mysql (зазвичай / var / lib / mysql), або в тимчасових таблицях (зазвичай / tmp).

Ви можете: - контролювати вільний простір під час створення індексу. - вкажіть змінну tmpdir MySQL на інше місце. Для цього потрібен перезапуск сервера.


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:

nano /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • перезапустити db

1
Ці налаштування 512M небезпечні. Вони керують максимальним розміром пам'яті для тимчасових таблиць у складних виборах. Це не лише "за з'єднання", а й "за таблицю tmp". Таким чином, ці значення можуть з легкістю призвести до того, що оперативна пам'ять у вас закінчиться.
Рік Джеймс

4

Цитувати документи MySQL.

Система зберігання InnoDB підтримує таблиці InnoDB у просторі таблиць, який можна створити з декількох файлів. Це дозволяє таблиці перевищувати максимальний індивідуальний розмір файлу. Простір таблиць може включати в себе сирі дискові розділи, що дозволяє надзвичайно великі таблиці. Максимальний розмір таблиці - 64 ТБ.

Якщо ви використовуєте таблиці InnoDB і не вистачає місця в просторі таблиць InnoDB. У цьому випадку рішення полягає в розширенні простору таблиць InnoDB. Див. Розділ 13.2.5, ["Додавання, видалення чи зміна розміру даних і файлів журналу InnoDB".]


4

у моєму випадку це лише тому, що сервер mysql працює разом із додатком, який записує занадто багато журналів, що диск заповнений.

ви можете перевірити, чи є на диску достатньо місця

df -h

якщо відсоток використання диска становить 100%, ви можете використовувати цю команду, щоб знайти, який каталог занадто великий

du -h -d 1 /

4

КОРИСТУВАЧИ ДАТЕРІВ: Це також трапляється, коли ви досягли 90% від обмеження розміру зображення Docker (схоже, 10% потрібно кешувати). Формулювання заплутане, оскільки це просто означає, що кількість дискового простору Docker може використати для всього.

Щоб виправити, перейдіть до налаштувань робочого столу Docker> Диск> пересуньте повзунок трохи більше праворуч> Застосувати.

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


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.