Назад | Перейти на главную страницу

InnoDB «Таблица xx заполнена» во время изменений базы данных

Я использую Percona Mysql Server 5.6.14-56 на CentOS 6.3 64bit.

На сервере много оперативной памяти (96 ГБ) и свободного места для хранения. Тип файловой системы: ext4

dev/sda6     ext4   1093623528  56576512 981494148   6% /mysqlstorage

Я попытался внести некоторые изменения в таблицу с 42 миллионами записей (размером около 12,5 ГБ (около 50% из них - индексы)), и сегодня мне показалось, что таблица заполнена.

Я проверил загруженные переменные и innodb_data_file_path = ibdata1:12M:autoextend это отображается в моем диспетчере mysql.

Эта БД работает, и я предпочитаю исправить эту проблему без простоя (или с минимальным временем простоя).

файл на таблицу активен, ibdata1 составляет около 3,9 ГБ

Из журналов MYSQL:

2015-02-19 01:43:04 7fe921f4b700 InnoDB: Error: Write to file (merge) failed at offset 356515840.
InnoDB: 1048576 bytes should have been written, only 1036288 were written.
InnoDB: Operating system error number 28.
InnoDB: Check that your OS and file system support files of this size.
InnoDB: Check also that the disk is not full or a disk quota exceeded.
InnoDB: Error number 28 means 'No space left on device'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html

Как бы я это сделал?

// РЕДАКТИРОВАТЬ

Задав этот вопрос, я узнал, что во время этого «чередования» мой / tmp быстро заполняется до 100%. Как только он достигает 100%, mysql выталкивает это сообщение об ошибке.

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2             50395844   1745156  46090688   4% /
tmpfs                 37105808         0  37105808   0% /dev/shm
/dev/sda1               495844     37092    433152   8% /boot
/dev/sda5              4080064     73740   3799068   2% /tmp
/dev/sda6            1093623528  56576524 981494136   6% /storage

Как я могу безопасно увеличить размер / tmp без простоев?

При изменении таблицы используется раздел / tmp в качестве промежуточного хранилища для явно и неявно созданных временных таблиц. Вы должны использовать tmpdir на достаточно большом разделе. Добавьте следующую строку в my.cnf

tmpdir = /path/to/the/mysqltmp