В одной из наших баз данных mysql размер на диске намного больше (28 ГБ), чем фактические данные (~ 5 ГБ), поэтому я более внимательно посмотрел на файлы, содержащиеся в mysql-data.
Я вижу следующие файлы
12K #sql-5254_eaa3.frm
8.9G #sql-5254_eaa3.ibd
12K #sql-537f_8d5b.frm
11G #sql-537f_8d5b.ibd
Вышеуказанное остается даже после перезапуска mysql, перезагрузки сервера и т. Д.
Любая идея, если это временные таблицы, которые выжили, например. авария? в производственной системе безопасно ли их просто удалить или мне нужно обрабатывать их по-другому?
Кстати, у нас для file_per_table установлено значение true.
заранее спасибо за любые подсказки!
Табличные файлы, которые вы видите, скорее всего, являются результатом операции ALTER TABLE, которая не может быть завершена. В соответствующая часть документации MySQL говорит:
Если MySQL дает сбой в середине операции ALTER TABLE, вы можете получить потерянную временную таблицу внутри табличного пространства InnoDB. Используя монитор таблиц, вы можете увидеть в списке таблицу с именем, которое начинается с # sql-. Вы можете выполнять операторы SQL для таблиц, имя которых содержит символ «#», если вы заключите имя в обратные кавычки. Таким образом, вы можете удалить такую потерянную таблицу, как любую другую потерянную таблицу, используя метод, описанный ранее. Чтобы скопировать или переименовать файл в оболочке Unix, вам необходимо заключить имя файла в двойные кавычки, если имя файла содержит «#».
поэтому я бы просто выпустил DROP TABLE
на них. Примечание: Не удаляйте просто файлы - иначе получится так называемый столы-сироты выдача таких предупреждений движка базы данных:
InnoDB: in InnoDB data dictionary has tablespace id N,
InnoDB: but tablespace with that id or name does not exist. Have
InnoDB: you deleted or moved .ibd files?
InnoDB: This may also be a table created with CREATE TEMPORARY TABLE
InnoDB: whose .ibd and .frm files MySQL automatically removed, but the
InnoDB: table still exists in the InnoDB internal data dictionary.
я реализовано это могут быть временные файлы .. было бы лучше, если бы вы могли:
mysqldump -uuser -ppass база данных> файл
файл кошки | mysql -uuser -ppass база данных
предупреждение снизу по-прежнему применяется.
мой первоначальный ответ:
Эти имена соответствуют названиям ваших таблиц? скорее всего, да, если так - это просто файлы данных. Механизм хранения innodb [расширение ibd предлагает вам его использовать] никогда не сжимает файлы данных. единственный способ уменьшить их размер - это:
mysqldump -uuser -ppass имя таблицы базы данных> файл; файл кошки | mysql -uuser -ppass база данных
предупреждение - обе операции займут много времени [очень многое зависит от количества индексов в таблицах, вашей подсистемы io; скорее всего, мы говорим о часах времени, если не больше]; заблокирует чтение. не запускайте это в рабочие часы.