2014-03-26 4 views

ответ

9
SELECT NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES; 

The 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%'; 

Опять же, ПРОСТРАНСТВО 0 для глобального табличного пространства, и большие целые числа для файла-за-таблицы.

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

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

+1

получать ошибки 'ОШИБКА 1109 (42S02): Неизвестный стол 'INNODB_SYS_TABLES' в information_schema' –

+0

Он был введен в MySQL 5.6 и в Percona Server 5.1. –

+0

Эй, я хочу решение в MySQL 5.5 –

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

Это просто говорит вам, включен ли параметр. Любые таблицы, созданные до включения файла file_per_table, по-прежнему будут в глобальном табличном пространстве. Моя интерпретация вопроса заключается в том, что они хотят знать, какие таблицы фактически имеют свой собственный файл (они были созданы после включения file_per_table). – antriver