У меня есть таблица базы данных MySQL с 31 107 600 строками. Она использует InnoDB. Это на системе CentOS 7.
Таблица имеет следующие столбцы:
- идентификатор
- временная метка
- мак
- данные
- направление
- site_id
Я хочу создать индекс, поэтому я запускаю эту команду:
ALTER TABLE MY_TABLE ADD INDEX idx_my_index (mac, site_id, timestamp);
Это занимает около 30 секунд, а затем выдает мне следующее:
ERROR 1114 (HY000): The table 'MY_TABLE' is full
Мой MySQL использует значение по умолчанию /var/lib/mysql
для хранения своих данных. В настоящее время раздел, на котором находится папка, имеет 12 ГБ свободного места, а размер моей базы данных составляет всего 2,7 ГБ, так что, насколько я могу судить, места должно быть более чем достаточно.
Почему я вижу эту ошибку? Поиск в интернете показывает, что, возможно, он использует временную таблицу и сталкивается с ограничениями по размеру временной таблицы? Может ли это быть? Или что-то еще? Как я могу это подтвердить?
решение1
Во время выполнения оператора ALTER TABLE наблюдайте за использованием пространства на всех файловых системах с помощью df. Посмотрите, не уменьшается ли быстро пространство на другой файловой системе, особенно небольшой, например, если у вас есть /tmp на tmpfs.