我想要检查在使用
MYSQL-5.5
查询时是否设置了innodb_file_per_table
(即创建了.ibd
)用于每个数据库表。
有什么方法可以做到吗?
MYSQL-5.5
查询时是否设置了innodb_file_per_table
(即创建了.ibd
)用于每个数据库表。
有什么方法可以做到吗?
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
SELECT NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
SPACE
对于全局表空间(ibdata1)将为0,而对于每个表的文件表空间则是一个更大的数字。
请参见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
命令。 :-)
ERROR 1109 (42S02): Unknown table 'INNODB_SYS_TABLES' in information_schema
。 - Deepak IngoleSELECT NAME, SPACE FROM INFORMATION_SCHEMA.INNODB_TABLES;
。 - Vovkin