Я использую 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