
Ошибка MySQL 1114: “The table is full” возникает, когда сервер базы данных не может записать новые данные из-за нехватки места для хранения временных или постоянных таблиц. На практике это часто связано с ограниченным размером диска, переполнением раздела tmpdir или исчерпанием лимитов памяти, выделенных под временные таблицы.
Чаще всего проблема проявляется при выполнении операций GROUP BY, ORDER BY, ALTER TABLE или сложных JOIN-запросов, когда MySQL создаёт временные таблицы для промежуточных вычислений. Если для этих таблиц не хватает дискового пространства или превышен лимит параметра tmp_table_size, сервер прерывает выполнение запроса с ошибкой 1114.
Чтобы устранить ошибку, важно определить, какой именно ресурс переполнен – временный каталог, раздел с таблицами InnoDB или системный диск. После диагностики корректируют параметры tmpdir, innodb_data_file_path и tmp_table_size, а также проверяют доступное пространство командой df -h или через панель мониторинга сервера. Такой подход позволяет устранить сбой без потери данных и предотвратить его повторное появление.
Что означает ошибка MySQL 1114 и как её исправить
Ошибка MySQL 1114: “The table is full” сигнализирует о невозможности записать данные в таблицу или временный файл. Она возникает, когда сервер базы данных достигает предела доступного пространства либо превышает установленные ограничения на размер временных таблиц.
Основные причины появления ошибки:
- переполнение диска, где размещены файлы временных таблиц (каталог tmpdir);
- недостаточный размер параметров tmp_table_size и max_heap_table_size;
- ограничения на размер файловой системы (например, при использовании ext3 или FAT32);
- временные таблицы создаются на диске, а не в памяти, из-за превышения порогового значения tmp_table_size;
- недостаток свободного места в разделе, где хранятся файлы данных InnoDB.
Для исправления ошибки выполните последовательные действия:
- Проверьте свободное место на диске командой df -h или через файловый менеджер сервера.
- Очистите временные каталоги и старые файлы журналов: /tmp, /var/tmp, /var/lib/mysql/tmp.
- Увеличьте параметры:
- tmp_table_size = 256M
- max_heap_table_size = 256M
- Если ошибка связана с InnoDB, расширьте размер файлов данных:
- измените значение innodb_data_file_path;
- добавьте новый файл данных с помощью параметра innodb_data_file_path=ibdata1:1G:autoextend.
- При использовании больших запросов проверьте, достаточно ли места в каталоге tmpdir, и при необходимости перенесите его в раздел с большим объёмом, указав путь в конфигурации MySQL:
[mysqld] tmpdir=/mnt/mysqltmp
После внесения изменений перезапустите сервер MySQL и повторно выполните запрос. Если ошибка сохраняется, стоит проверить логи MySQL – файл error.log содержит подробности, указывающие, какая именно таблица или операция вызвала сбой.
Причины возникновения ошибки MySQL 1114 «The table is full»

| Причина | Описание | Рекомендации по устранению |
|---|---|---|
| Недостаток свободного места на диске | Раздел, где расположены таблицы MySQL или временные файлы, переполнен. | Проверить командой df -h, очистить временные каталоги и логи, освободить пространство. |
| Ограничения параметров tmp_table_size и max_heap_table_size | Размер временных таблиц превышает лимит, установленный в конфигурации сервера. | Увеличить значения обоих параметров до одинаковых, например до 256M. |
| Переполнение InnoDB tablespace | Размер файлов данных InnoDB достиг предела, определённого параметром innodb_data_file_path. | Добавить новый файл данных с опцией autoextend или увеличить размер существующего файла. |
| Переполненный каталог tmpdir | Каталог для временных файлов не имеет достаточного объёма или расположен в ограниченном разделе. | Перенести tmpdir в каталог с большим объёмом, обновив параметр tmpdir в my.cnf. |
| Файловая система с ограничением размера файла | Использование старых систем (например, FAT32) накладывает лимит в 4 ГБ на один файл. | Переместить данные на раздел с файловой системой ext4 или XFS. |
| Недостаток оперативной памяти при создании временных таблиц | MySQL не может создать временную таблицу в памяти и переключается на дисковый режим, где не хватает места. | Увеличить доступную память или уменьшить сложность запросов с сортировками и группировками. |
Каждая из перечисленных причин требует проверки системных параметров, состояния хранилища и конфигурации сервера. Анализ логов MySQL помогает точно определить, в каком каталоге или таблице возникло ограничение.
Как определить, какая таблица или временный файл переполнен
При появлении ошибки MySQL 1114 важно установить, где именно произошло переполнение – в постоянной таблице, временной таблице или каталоге временных файлов. Определить источник проблемы можно с помощью анализа логов и системных инструментов.
Пошаговый порядок проверки:
- Изучить системный журнал MySQL:
sudo cat /var/log/mysql/error.log | grep "The table is full"
В сообщении указывается имя базы данных и таблицы, вызвавшей ошибку. Если таблица не указана, переполнен временный каталог.
- Проверить размер временных файлов:
ls -lh /tmp | grep "MYD\|MYI\|ibtmp"
Крупные файлы с префиксами ibtmp или #sql принадлежат временным таблицам, которые создаются при выполнении запросов.
- Оценить использование временного пространства InnoDB:
SHOW ENGINE INNODB STATUS\G
В разделе Temporary tablespace отображаются размеры временных таблиц и их текущее состояние.
- Проверить каталог tmpdir:
SELECT @@tmpdir;
Полученное значение – путь к каталогу, где MySQL хранит временные таблицы. После этого можно проверить свободное место:
df -h $(mysql -N -e "SELECT @@tmpdir;")
- Для постоянных таблиц выполнить:
SHOW TABLE STATUS FROM database_name;
В колонке Data_length видно фактическое использование пространства. Сравнение с лимитом файловой системы показывает, достигнут ли предел.
Если временные файлы стремительно увеличиваются при выполнении определённого запроса, стоит проверить, не создаются ли на диске крупные промежуточные таблицы. Это указывает, что параметров tmp_table_size и max_heap_table_size недостаточно для хранения данных в памяти.
После выявления источника можно точно определить, какие настройки или каталоги требуют изменения, чтобы предотвратить повторное появление ошибки.
Настройка параметров tmpdir и innodb_tmpdir для устранения ошибки
Ошибка MySQL 1114 часто связана с нехваткой места в каталоге, где сервер создаёт временные таблицы. За размещение таких таблиц отвечают параметры tmpdir и innodb_tmpdir. Их настройка позволяет перенести временные файлы в раздел с достаточным объёмом и устранить сбои при выполнении запросов.
Параметр tmpdir определяет путь, где MySQL создаёт временные таблицы для операций GROUP BY, ORDER BY и сортировок. Если текущий каталог расположен в разделе с ограниченным пространством (например, /tmp), следует перенести его в отдельную директорию:
sudo mkdir /mnt/mysqltmp sudo chown mysql:mysql /mnt/mysqltmp
Затем в конфигурационном файле /etc/my.cnf или /etc/mysql/my.cnf обновляют параметр:
[mysqld] tmpdir=/mnt/mysqltmp
После сохранения изменений требуется перезапуск MySQL:
sudo systemctl restart mysql
Параметр innodb_tmpdir определяет место хранения временных файлов, используемых движком InnoDB. Если он не задан, MySQL использует каталог, указанный в tmpdir. Для серверов с большим объёмом InnoDB-операций рекомендуется назначить отдельный каталог:
[mysqld] innodb_tmpdir=/mnt/innodbtmp
Перед применением изменений создают каталог и задают права доступа:
sudo mkdir /mnt/innodbtmp sudo chown mysql:mysql /mnt/innodbtmp
Чтобы проверить актуальные значения параметров без перезапуска, используют команды:
SHOW VARIABLES LIKE 'tmpdir'; SHOW VARIABLES LIKE 'innodb_tmpdir';
Если временные таблицы создаются в памяти, но при превышении лимита переходят на диск, перенос каталогов tmpdir и innodb_tmpdir в раздел с большим объёмом позволяет избежать ошибки 1114 без изменения логики запросов.
Увеличение доступного пространства для временных таблиц MySQL
Ошибка MySQL 1114 часто возникает при исчерпании пространства, выделенного под временные таблицы. Для предотвращения сбоя необходимо увеличить объём, доступный для их хранения, и оптимизировать параметры, отвечающие за размещение данных в памяти и на диске.
Основные параметры, влияющие на размер временных таблиц:
- tmp_table_size – максимальный размер внутренней временной таблицы, создаваемой в памяти.
- max_heap_table_size – ограничение на размер таблиц типа MEMORY, используемых для временных вычислений.
Значения этих параметров должны быть одинаковыми. Если таблица превышает установленный предел, MySQL автоматически переносит её на диск, что может вызвать ошибку 1114 при нехватке пространства.
Пример настройки в конфигурационном файле /etc/my.cnf:
[mysqld] tmp_table_size = 512M max_heap_table_size = 512M
Чтобы применить изменения без перезапуска, можно задать параметры на лету:
SET GLOBAL tmp_table_size = 512*1024*1024; SET GLOBAL max_heap_table_size = 512*1024*1024;
Дополнительные способы увеличения доступного пространства:
- Переместить каталог tmpdir в раздел с большим объёмом, используя команду:
[mysqld] tmpdir=/mnt/mysqltmp
- Проверить свободное место на диске:
df -h /tmp
и при необходимости расширить файловую систему или подключить отдельный диск для временных файлов.
- Ограничить создание слишком крупных временных таблиц с помощью оптимизации запросов – уменьшить использование GROUP BY и ORDER BY для больших наборов данных.
- Для InnoDB добавить новый временный файл, увеличив пространство для временных операций:
[mysqld] innodb_temp_data_file_path=ibtmp1:512M:autoextend
После изменения параметров рекомендуется проверить текущие значения командой:
SHOW VARIABLES LIKE 'tmp_table_size';
SHOW VARIABLES LIKE 'max_heap_table_size';
Увеличение лимитов и перенос временных таблиц в отдельный каталог устраняют ошибку 1114 и стабилизируют работу MySQL при обработке больших объёмов данных.
Использование движка InnoDB вместо MyISAM для предотвращения переполнения
Ошибка MySQL 1114 часто возникает при использовании движка MyISAM, который ограничен размером отдельного файла таблицы и зависим от файловой системы. InnoDB решает эту проблему благодаря поддержке распределённых tablespace и авторасширяемых файлов данных.
Преимущества перехода на InnoDB для предотвращения переполнения:
- Файлы данных InnoDB могут автоматически расширяться в пределах дискового пространства, благодаря параметру innodb_data_file_path с опцией autoextend.
- InnoDB использует внутренние таблицы и буферы памяти, уменьшая зависимость от временных файлов на диске при сложных запросах.
- Поддержка транзакций и блокировок строк позволяет безопасно обрабатывать большие объёмы данных без риска повреждения таблиц.
Для перевода таблицы с MyISAM на InnoDB используется команда:
ALTER TABLE table_name ENGINE=InnoDB;
При массовом преобразовании всех таблиц базы данных можно применить скрипт:
SELECT CONCAT('ALTER TABLE ', table_name, ' ENGINE=InnoDB;')
FROM information_schema.tables
WHERE table_schema = 'database_name' AND engine = 'MyISAM';
Рекомендуется также настроить параметры InnoDB для оптимизации работы с большими таблицами:
- innodb_buffer_pool_size – увеличить до 50–70% объёма доступной оперативной памяти для ускорения работы с данными.
- innodb_log_file_size – увеличить для снижения числа операций записи на диск.
- innodb_temp_data_file_path – убедиться, что временные файлы InnoDB создаются в разделе с достаточным свободным пространством.
Переход на InnoDB позволяет избежать ошибок переполнения, возникающих при работе с MyISAM, и обеспечивает стабильное выполнение запросов с большими объёмами данных.
Проверка системных ограничений и очистка временных каталогов
Ошибка MySQL 1114 часто связана с ограничениями операционной системы на размер файлов и доступное пространство в временных каталогах. Для устранения проблемы необходимо проверить системные лимиты и освободить место, используемое временными файлами.
Проверка свободного места и ограничений:
- Проверка дискового пространства командой:
df -h /tmp
Определяет доступный объём для временных таблиц.
- Проверка ограничения на размер файлов:
ulimit -f
- Проверка прав доступа к каталогам MySQL:
ls -ld /tmp /var/lib/mysql/tmp
Недостаточные права могут блокировать создание временных таблиц.
Очистка временных каталогов:
- Удаление старых временных файлов MySQL:
sudo rm -f /tmp/#sql* /var/lib/mysql/tmp/*
- Очистка системного tmp:
sudo find /tmp -type f -mtime +1 -delete
Удаляет файлы старше одного дня, освобождая место.
- Очистка логов MySQL, занимающих много места:
sudo truncate -s 0 /var/log/mysql/*.log
После освобождения места и проверки прав рекомендуется перезапустить MySQL:
sudo systemctl restart mysql
Регулярная проверка системных ограничений и очистка временных каталогов снижает риск повторного появления ошибки 1114 при выполнении сложных запросов или операций с большими таблицами.
Вопрос-ответ:
Почему при выполнении запроса с GROUP BY появляется ошибка MySQL 1114?
Ошибка MySQL 1114 возникает, когда сервер пытается создать временную таблицу для выполнения операции GROUP BY и не хватает места на диске или в памяти. MySQL сначала создаёт таблицу в памяти, ограниченную параметрами tmp_table_size и max_heap_table_size. Если объём данных превышает эти лимиты, таблица переносится на диск в каталог tmpdir. Если свободного пространства в этом каталоге недостаточно, запрос прерывается с ошибкой 1114.
Как проверить, какая таблица вызвала переполнение в MySQL?
Для выявления таблицы, вызвавшей ошибку, нужно изучить файл логов MySQL, обычно расположенный в /var/log/mysql/error.log. В сообщениях об ошибках указывается имя базы данных и таблицы. Если таблица не указана, вероятно, переполнен временный файл в каталоге tmpdir. Дополнительно можно использовать SHOW TABLE STATUS FROM database_name для оценки размера каждой таблицы и выявления превышающих лимит объектов.
Можно ли исправить ошибку 1114 без изменения структуры таблиц?
Да, исправление возможно через настройку параметров MySQL и операционной системы. Необходимо увеличить tmp_table_size и max_heap_table_size, перенести каталог tmpdir в раздел с большим объёмом, очистить временные файлы и убедиться, что на диске достаточно свободного места. Также стоит проверить лимиты файловой системы и права доступа, чтобы MySQL мог создавать новые временные таблицы.
Почему переход на InnoDB помогает избежать ошибки переполнения?
InnoDB использует autoextend-файлы данных и распределённое пространство tablespace, что позволяет таблицам автоматически расширяться без ограничения размера одного файла, как в MyISAM. Это снижает вероятность переполнения при больших объёмах данных или сложных запросах, где создаются временные таблицы. Дополнительно InnoDB хранит временные данные в памяти до достижения порогового лимита, что уменьшает нагрузку на диск.
Какие системные действия помогают предотвратить появление ошибки 1114?
Необходимо регулярно контролировать свободное место в каталоге tmpdir и на разделе с данными MySQL, очищать устаревшие временные файлы, проверять ограничения файловой системы на размер отдельных файлов и корректно настраивать права доступа к каталогам. Кроме того, увеличение tmp_table_size и max_heap_table_size позволяет хранить больше данных в памяти, уменьшая риск переполнения временных таблиц на диске.
Почему возникает ошибка MySQL 1114 при работе с большими таблицами и как её исправить?
Ошибка MySQL 1114 появляется, когда сервер не может записать новые данные в таблицу или временный файл из-за исчерпания доступного пространства. Чаще всего это связано с недостаточным размером параметров tmp_table_size и max_heap_table_size, переполнением каталога tmpdir или ограничениями файловой системы. Для устранения ошибки нужно увеличить tmp_table_size и max_heap_table_size до значений, соответствующих объёму обрабатываемых данных, очистить временные каталоги и при необходимости перенести tmpdir в раздел с большим свободным местом. Если используются таблицы MyISAM, переход на InnoDB с авторасширяемыми файлами данных позволит избежать ограничений размера одного файла. После внесения изменений рекомендуется перезапустить MySQL и проверить свободное место и права доступа к каталогам временных файлов.
