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

Dip*_*ole 16 mysql innodb information-schema mysql-5.5

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

有办法吗?

小智 49

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

  • 这只是告诉您是否启用了该设置.在启用file_per_table之前创建的任何表仍将在全局表空间中.我对这个问题的解释是他们想知道哪些表实际上有自己的文件(它们是在启用file_per_table后创建的). (6认同)

Bil*_*win 16

SELECT NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
Run Code Online (Sandbox Code Playgroud)

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%';
Run Code Online (Sandbox Code Playgroud)

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

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

唯一的其他解决方案是ls在数据目录中使用.:-)