我想檢查使用MYSQL-5.5
查詢爲每個數據庫表是否設置了innodb_file_per_table
(即.ibd
已創建)。任何方式來檢查每個表是否在MYSQL 5.5中設置innodb_file_per_table?
任何方式來做到這一點?
我想檢查使用MYSQL-5.5
查詢爲每個數據庫表是否設置了innodb_file_per_table
(即.ibd
已創建)。任何方式來檢查每個表是否在MYSQL 5.5中設置innodb_file_per_table?
任何方式來做到這一點?
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%';
再次,空間爲0,爲全球的表空間,併爲文件每個表的整數。
需要注意的是,它只報告緩衝池中有頁面的表。如果您尚未查詢表,則緩衝池LRU中將沒有頁面,查詢將不會報告該表的任何結果。
唯一的另一種解決方案是在數據目錄中使用ls
。 :-)
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
這只是告訴你,如果設置啓用。在啓用file_per_table之前創建的任何表仍將位於全局表空間中。 我對這個問題的解釋是他們想知道哪些表實際上有它們自己的文件(它們是在啓用file_per_table後創建的)。 – antriver
得到錯誤'ERROR 1109(42S02):在information_schema' –
未知表 'INNODB_SYS_TABLES' 這是在MySQL 5.6和Percona的服務器5.1引入的。 –
嘿,我想MySQL 5.5中的解決方案 –