Любой способ проверить, установлен ли innodb_file_per_table в MYSQL 5.5 для таблицы?

Я хочу проверить, установлен ли innodb_file_per_table (т.е. .ibd) для каждой таблицы базы данных с помощью запроса MYSQL-5.5.

Как это сделать?

Ответ 1

SELECT NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;

SPACE будет равен 0 для глобального табличного пространства (ibdata1) и некоторого большего числа для табличных пространств таблиц.

См. http://dev.mysql.com/doc/refman/5.6/en/innodb-sys-tables-table.html


Поскольку вы используете MySQL 5.5, вышеупомянутое решение не будет работать. В MySQL 5.5 вы можете использовать это:

SELECT DISTINCT TABLE_NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU
WHERE TABLE_NAME IS NOT NULL AND TABLE_NAME NOT LIKE 'SYS%';

Опять же, SPACE равно 0 для глобального табличного пространства и больше целых чисел для файла за стол.

С оговоркой, что он только сообщает о таблицах, которые имеют страницы в пуле буферов. Если вы не запросили таблицу, у нее не будет страниц в пуле буфера LRU, и запрос не будет сообщать о каком-либо результате для этой таблицы.

Единственное другое решение - использовать ls в каталоге данных.: -)

Ответ 2

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)