有没有办法检查是否在每个表的MYSQL 5.5中设置了innodb_file_per_table?

时间:2014-03-26 04:43:05

标签: mysql innodb information-schema mysql-5.5

我想使用innodb_file_per_table查询检查每个数据库表是否已设置.ibd(即MYSQL-5.5已创建)。

有什么办法吗?

2 个答案:

答案 0 :(得分:44)

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

答案 1 :(得分:14)

SELECT NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;

对于全局表空间(ibdata1),SPACE将为0,对于每表文件表空间,SELECT DISTINCT TABLE_NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU WHERE TABLE_NAME IS NOT NULL AND TABLE_NAME NOT LIKE 'SYS%'; 将为更大的数字。

请参阅http://dev.mysql.com/doc/refman/5.6/en/innodb-sys-tables-table.html


由于您使用的是MySQL 5.5,因此上述解决方案无效。在MySQL 5.5中,您可以使用:

ls

同样,全局表空间的SPACE为0,每个表的文件的整数更大。

需要注意的是,它只报告缓冲池中有页面的表。如果您还没有查询表,它将在缓冲池LRU中没有页面,并且查询将不会报告该表的任何结果。

唯一的其他解决方案是在数据目录中使用{{1}}。 : - )