information_schema数据库是MySQL自带的一个数据库,它提供了访问数据库元数据的方式。
那什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
information_schema中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此你将无法看到与之相关的任何文件。你可以通过show databases查看当前是否还有information_schema这个数据。
使用use information_schema命令进入该数据库,然后执行show tables,可以看到该数据库下含有的所有表。
如下:
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| ENGINES |
| EVENTS |
| FILES |
| GLOBAL_STATUS |
| GLOBAL_VARIABLES |
| KEY_COLUMN_USAGE |
| OPTIMIZER_TRACE |
| PARAMETERS |
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
| PROFILING |
| REFERENTIAL_CONSTRAINTS |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| SESSION_STATUS |
| SESSION_VARIABLES |
| SQL_FILTER_INFO |
| STATISTICS |
| TABLES |
| TABLESPACES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
| THREAD_GROUP_STATUS |
| PR_SLAVE_STATUS |
| INDEX_UTILIZATION |
| TABLE_UTILIZATION |
| TABLE_STATISTICS |
| INDEX_STATISTICS |
| EXEC_CACHE_STATUS |
| TokuDB_file_map |
| TokuDB_trx |
| INNODB_SYS_DATAFILES |
| TokuDB_locks |
| INNODB_SYS_TABLESTATS |
| INNODB_CMPMEM_RESET |
| TokuDB_fractal_tree_block_map |
| TokuDB_lock_waits |
| INNODB_CMP_PER_INDEX |
| INNODB_TRX |
| INNODB_FT_DELETED |
| INNODB_FT_INDEX_CACHE |
| INNODB_LOCK_WAITS |
| INNODB_CMP |
| INNODB_SYS_INDEXES |
| INNODB_CMP_RESET |
| INNODB_SYS_FIELDS |
| TokuDB_background_job_status |
| INNODB_BUFFER_PAGE |
| INNODB_BUFFER_PAGE_LRU |
| INNODB_FT_INDEX_TABLE |
| INNODB_LOCKS |
| INNODB_SYS_TABLESPACES |
| INNODB_METRICS |
| INNODB_SYS_FOREIGN_COLS |
| INNODB_BUFFER_POOL_STATS |
| INNODB_IO_STATUS |
| INNODB_SYS_COLUMNS |
| INNODB_SYS_FOREIGN |
| INNODB_FT_BEING_DELETED |
| INNODB_FT_DEFAULT_STOPWORD |
| INNODB_RSEG |
| INNODB_CMPMEM |
| INNODB_SYS_TABLES |
| TokuDB_fractal_tree_info |
| INNODB_FT_CONFIG |
| INNODB_CMP_PER_INDEX_RESET |
+---------------------------------------+
其中我们比较熟悉的如tables表,比方查询数据库中是否包含某个表。
select table_name from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='%s' and TABLE_NAME='%s'
table_schema表示数据库名。
还有常见的跟Innodb事务锁相关的三个表:INNODB_TRX表、INNODB_LOCKS表、INNODB_LOCK_WAITS表。
通过查看这三个表可以事务加锁的情况以及事务锁等待的情况,从而可以更简单地监控当前事务并分析可能存在的锁问题,例如分析死锁。