如何理解和掌握mysql中的information_schema

分类:编程技术 时间:2024-02-20 15:48 浏览:0 评论:0
0
本文介绍《如何理解和掌握mysql中的information_schema》的相关知识。在实际案例操作过程中,很多人都会遇到这样的困境。接下来就让小编带领大家学习一下这些情况该如何处理吧!我希望你能仔细阅读并学到一些东西!

|什么是information_schema

information_schema提供对数据库元数据、统计信息以及有关MySQL Server的信息(例如:数据库名称或表名称、字段数据类型和访问权限等)的访问。该库中保存的信息也可以称为 MySQL 数据字典或系统目录。

在每个MySQL实例中,都有一个独立的information_schema,用于存储MySQL实例中所有其他数据库的基本信息。 information_schema数据库包含多个只读表(非持久表),因此数据目录中没有对应的关联文件ry 位于磁盘上,并且不能在这些表上设置触发器。虽然查询时可以使用USE语句将默认数据库设置为information_schema,但该库下的所有表都是只读的,无法执行INSERT、UPDATE、DELETE等数据更改操作。

对information_schema下的表进行查询操作可以替代一些show查询语句(例如:SHOW DATABASES、SHOW TABLES等)。与使用show语句相比,通过查询information_schema下的表来获取数据有以下优点:

符合“科德定律”,所有访问都是基于表访问来完成的。

您可以使用 SELECT 语句的 SQL 语法。你只需要了解一些你想要查询的表名和列名的含义即可。

基于SQL语句的查询,对于来自information_schema的查询,结果可以进行过滤、排序、连接,查询结果集格式对应用更加友好

该技术的实现与其他数据库系统中的类似实现具有更强的互操作性。例如:Oracle数据库用户熟悉在Oracle数据字典中查询表,因此也可以使用相同的方法在MySQL中查询数据字典中的表来执行查询以获得所需的数据

权限required to access information_schema

所有用户都有权限访问information_schema下的表(但只有这些表中的用户才能看到具有访问权限的对象对应的数据行),但只能访问Server中的部分数据字典表层。部分Server层的数据字典表和InnoDB层的数据字典表需要额外的授权才能访问。如果用户权限不足,查询服务器层数据字典表时,不会返回任何数据,或者某列无权限访问时,该列返回NULL值。当查询时g InnoDB数据字典表,访问会直接被拒绝(访问这些表需要process权限,注意不是select权限)

从information_schema查询相关数据所需的权限同样适用于SHOW语句。无论使用哪种查询方式,都必须拥有对象的权限才能看到相关数据。

PS:

MySQL 5.6版本中共有59张表,其中10张MyISAM引擎临时表(数据字典表)和49张Memory引擎临时表(保存统计信息和数据)一些临时信息)。在MySQL 5.7版本中,该架构下总共有61个表,其中包括10个InnoDB存储引擎临时表(数据字典表)和51个Memory引擎临时表。在MySQL 8.0中,该schema下的数据字典表(包括一些原来的内存引擎临时表)已经迁移到mysql schema,并且这些数据字典表被隐藏den在mysql模式下,无法直接访问。需要通过information_schema下的同名表来访问它们。访问(统计信息表保留在information_schema下,仍然是Memory引擎)

虽然通过查询information_schema中的表直接获取数据有很多优点,但由于SHOW语法为人们所熟悉且广泛使用,所以SHOW语句仍然是一种替代方法,而且随着information_schema的实现,SHOW语句中的功能得到了增强(可以使用like或where子句进行过滤),例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

12

13

14

15

p>

16

17

18

19

20

21

22

23

24

25

26

27

# 语法

语法:

显示[全球 |会话]变量

[LIKE '模式' | WHERE expr]

#示例1

root@localhost : information_schema 12:20:31>显示变量like< /code> '%log_bin%';

+--------------------------------+- ------------ -------------------------------------- -+

|变量名 |值 |

+---------------------------------+-------- --------- ----------------------------------+

| log_bin                                                        ; |

|日志_bin_索引 | /home/mysql/data/mysqldata1/binlog/mysql-bin.索引 |

| log_bin_trust_function_creators | log_bin_trust_function_creators | ON                              p; /code>                                                                                                                                                                                                                                      打开          --------------------------+---------------- -------------- --------------------------------+

6 设置 (0.00 秒)

# 示例2

root@localhost : information_schema 12:21:41> 显示变量where 变量名喜欢 'log_bin%' 值='ON';

+--------- ----- ------------------+------+

|变量名 |值 |

+-------- ------ ------------------+------+

|日志_bin | ON |

| log_bin_trust_fun动作创建者 | ON  |

+< /code>---- -----------------------------+---- --+

2 in 设置 (0.00秒)

# 注意,类似其中子句可以单独使用,但同时使用wherelike 代码>子句,like子句必须位于 where之后

|信息学on_schema组合对象

information_schema下的所有表都使用Memory和InnoDB存储引擎,并且都是临时表,而不是持久表。数据库重启后这些数据将会丢失。 MySQL的四个系统库中,它也是唯一一个在文件系统上没有与库表对应的目录和文件的系统库。

下面,我们根据各自用途的相似性对information_schema下的表进行分类。本期我们首先大致了解一下information_schema系统库中有哪些表。这些表大致有什么用呢?

1.服务器层统计信息字典表

COLUMNS:

提供查询表中的列(字段)信息 p>

该表是一个临时表InnoDB存储引擎的表

KEY_COLUMN_USAGE:

提供哪些索引列有con的查询应变

该表中的信息包含主键、唯一索引、外键和其他约束的信息,例如:所在库表的列名、引用库的列名表中的信息有点类似于TABLE_CONSTRAINTS表中记录的信息,但是TABLE_CONSTRAINTS表不记录约束所引用的数据库表列信息。但是,它记录了TABLE_CONSTRAINTS表中没有的约束类型信息

该表是Memory引擎临时表

REFERENTIAL_CONSTRAINTS:

提供有关外键的查询约束一些信息

这个表是一个Memory引擎临时表

STATISTICS:

提供一些关于索引的统计信息以供查询。一个索引对应一行记录

该表是Memory引擎临时表

TABLE_CONSTRAINTS:

提供与查询表相关的约束信息

该表是Memory引擎临时表

FILES:

提供与查询MySQL数据表空间文件相关的信息,包括InnoDB存储引擎和NDB存储引擎相关的数据文件信息。由于NDB存储引擎在国内使用的很少,所以我们大部分场景(95%以上的场景都可以使用InnoDB存储引擎)都使用InnoDB存储引擎

此表为Memory存储引擎表

ENGINES:

提供与MySQL Server支持的引擎相关的查询信息

该表是Memory引擎临时表

TABLESPACES:

提供有关活动表空间的查询信息(主要记录的是NDB存储引擎的表空信息)

注意:该表不提供有关InnoDB存储引擎的表空间的信息。有关InnoDB表空间元数据信息,请查询INNODB_SYS_TABLESPACES和INNODB_SYS_数据文件表。另外,从MySQL 5.7.8开始,INFORMATION_SCHEMA.FILES表还提供了查询InnoDB表空间的元数据信息

该表是Memory引擎临时表。

SCHEMATA:

提供MySQL Server中数据库列表信息的查询。一个模式代表一个数据库

这个表是一个内存引擎临时表

2.服务器层表级对象字典表

VIEWS:

提供查询数据库中的视图以及查询该表的账户相关信息需要有show view权限

该表是InnoDB引擎临时表

TRIGGERS:

提供数据库下触发器信息的查询。查询某个表的触发器,查询账号必须有触发器权限

该表是InnoDB引擎临时表

TABLES:

提供查询数据库表相关基本信息

This表是Memory引擎临时表

ROUTINES:

提供存储过程和存储函数的查询信息(不包括用户自定义函数UDF),该表中的信息对应的信息记录在“mysql.proc”中(如果表中有值)

此表是InnoDB引擎临时表

PARTITIONS:

提供查询分区表信息

该表是InnoDB引擎临时表

EVENTS:

提供与计划任务事件相关的查询信息

该表是InnoDB引擎临时表

参数:

提供有关存储过程和函数的参数信息,以及有关存储函数的返回值的信息。这些参数信息与mysql.proc表中param_list列记录的内容类似

该表是InnoDB引擎临时表

3.服务器层混合信息信息字典表

strong>

GLOBAL_STATUS、GLOBAL_VARIABLES、SESSION_STATUS、SESSION_VARIABLES:

提供全局和会话级状态变量和系统变量信息的查询。这些表是内存引擎临时表

OPTIMIZER_TRACE:

提供优化器跟踪功能生成的信息。

追踪功能默认关闭。使用optimizer_trace系统变量来启用跟踪功能。如果开启该功能,每个会话只能跟踪自己执行的语句,而看不到其他会话执行的语句,并且每个会话只能记录最后跟踪的SQL语句

表是InnoDB引擎临时表

PLUGINS:

提供MySQL Server支持哪些插件的查询信息

该表是InnoDB引擎临时表

< p>PROCESSLIST:

提供有关运行proc的线程的一些状态信息的查询ess

该表是InnoDB引擎临时表

PROFILING:

提供语句性能分析的查询信息。其记录内容对应于SHOW PROFILES和SHOW PROFILE语句生成的信​​息。只有当会话变量profiling=1时,该表才需要记录语句性能分析信息,否则该表不会记录。

注意:从 MySQL 5.7.2 开始,不再推荐使用该表,并将在未来的 MySQL 版本中删除该表。使用性能模式代替;相反

该表是一个内存引擎临时表

CHARACTER_SETS:

提供有关MySQL服务器支持的可用字符集的查询

该表是内存引擎的临时表

COLLATIONS:

提供有关MySQL服务器支持的可用排序规则的查询

该表是内存引擎临时表

COLLATION_CHARACTER_SET_APPLICABILITY:

提供查询哪种字符集适合MySQL Server中的哪种排序规则。查询结果集相当于通过SHOW COLLATION得到的结果集中的前两个字段值。到目前为止还没有发现这个表有多大用处。提供Memory引擎临时表查询列(字段)的权限信息

COLUMN_PRIVILEGES:

。表中内容来自mysql。 column_priv列权限表(需要对表的列进行单独授权才会有内容)

该表是Memory引擎的临时表

SCHEMA_PRIVILEGES:

提供库级权限信息的查询。每种库级权限记录一行信息。该表中的信息来自mysql.db表

该表是Memory引擎临时表

TABLE_PRIVILEGES:

提供表级权限的查询信息,在此表中内容来自mysql.tables_priv

该表是Memory引擎临时表

USER_PRIVILEGES:

提供查询全局权限的信息。该表的信息来自mysql。 user表

该表是Memory引擎的临时表

4. InnoDB层系统字典表

INNODB_SYS_DATAFILES:

提供查询InnoDB单表文件和常规表空间数据文件的路径信息,相当于中的信息InnoDB数据字典中的SYS_DATAFILES表

该表中的信息包含所有InnoDB表空间类型的元数据,包括独立表空间、常规表空间、系统表空间、临时表空间和undo表空间(如果启用独立表空间)

该表是内存引擎临时表,查询该表的用户需要有进程权限。

INNODB_SYS_VIRTUAL:

为我提供查询tadata有关InnoDB虚拟生成的列以及与其关联的列的信息,相当于InnoDB数据字典内SYS_VIRTUAL表中的信息。 INNODB_SYS_VIRTUAL表中显示的行信息是与虚拟生成列关联的列的每一列的信息。

该表是内存引擎的临时表。查询该表的用户需要有进程权限

INNODB_SYS_INDEXES:

提供查询InnoDB索引的元数据信息。相当于InnoDB数据字典中SYS_INDEXES表中的信息

该表是内存引擎的临时表。查询该表的用户需要有进程权限

INNODB_SYS_TABLES:

提供InnoDB表元数据的查询,相当于InnoDB数据字典中SYS_TABLES表的信息。

该表是内存引擎的临时表。查询该表的用户需要有进程权限

INNODB_SYS_FIELDS:

提供查询InnoDB索引键列(字段)的元数据信息,相当于里面的SYS_FIELDS表的信息InnoDB数据字典

该表是内存引擎的临时表,查询该表的用户需要有进程权限

INNODB_SYS_TABLESPACES:

提供元数据查询InnoDB独立表空间和普通表空间(还包括全文索引表空间)的信息,相当于InnoDB数据字典中SYS_TABLESPACES表中的信息

该表是临时表对于内存引擎。查询表的用户需要有进程权限

INNODB_SYS_FOREIGN_COLS:

提供查询InnoDB外键列状态信息,相当于InnoDB数据内部SYS_FOREIGN_COLS表的信息字典

该表是内存引擎的临时表,查询该表的用户需要有进程权限

INNODB_SYS_COLUMNS:

提供元数据的查询InnoDB表列的信息,相当于InnoDB数据字典内部SYS_COLUMNS表的信息

该表是内存引擎的临时表,查询该表的用户需要有进程权限

INNODB_SYS_FOREIGN:

提供InnoDB外键元数据信息的查询,相当于InnoDB数据字典内部SYS_FOREIGN表的信息

该表是内存引擎的临时表。查询表的用户需要有进程权限

INNODB_SYS_TABLESTATS:

提供查询InnoDB表的较低级别的状态信息视图。 MySQL优化器使用这些统计数据来计算并确定在查询InnoDB数据时使用哪个索引祝福。这些信息存储在内存中的数据结构中,与磁盘上存储的数据没有对应关系。 InnoDB内部没有对应的系统表。

该表是内存引擎的临时表。查询该表的用户需要有进程权限

5. InnoDB层锁、事务、统计信息字典表

INNODB_LOCKS:

提供对innodb引擎事务中正在请求但未获取到的、阻塞的锁信息的查询同时其他事务(即不同事务之间没有锁等待)的锁信息,这里无法查看。例如,当只有一个事务时,无法查看该事务添加的锁信息)。该表的内容可以用来诊断高并发下的锁竞争信息。

该表是内存引擎的临时表。要访问该表,您需要拥有进程权限

INNODB_TRX:

提供当前在InnoDB引擎中执行的每个查询。事务(不包括只读事务)的信息,包括事务是否正在等待锁、事务何时启动、事务正在执行的SQL语句的文本信息(如果有SQL)。

该表是内存引擎的临时表。查询该表的用户需要有进程权限

INNODB_BUFFER_PAGE_LRU:

提供缓冲池中的查询页面信息,与INNODB_BUFFER_PAGE表不同。 INNODB_BUFFER_PAGE_LRU表存储了有关innodb缓冲池中的页面如何进入LRU链表的信息,并确定当缓冲池不够时需要从缓冲池中逐出哪些页面

该表是一个Memory引擎临时表

p>

INNODB_LOCK_WAITS:

为每个阻塞的InnoDB事务提供锁等待记录的查询离子,包括带有事务请求的锁和阻止锁请求被授予的锁等锁

该表是内存引擎表。访问该表的用户需要有进程权限

INNODB_TEMP_TABLE_INFO:

提供InnoDB实例中当前活跃用户的查询(已建立连接的用户创建的InnoDB临时表的信息(断开的用户连接对应的临时表将被自动删除)。它不提供查询优化器使用的内部InnoDB临时表的信息。INNODB_TEMP_TABLE_INFO表是在第一次查询时创建的。

该表是内存引擎的临时表,查询该表的用户需要有进程权限

INNODB_BUFFER_PAGE:

提供查询缓冲池中页面的信息

查询这个表需要用户有PROCESS权限,这个表是一个Memory engine临时表

INNODB_METRICS:

提供查询InnoDB更详细的性能信息,是对InnoDB的PERFORMANCE_SCHEMA的补充。查询该表可以用来检查innodb的整体健康状况。还可以用来诊断性能瓶颈、资源短缺和应用程序问题等。

该表是内存引擎的临时表。查询该表的用户需要有进程权限

INNODB_BUFFER_POOL_STATS:

提供Innodb缓冲池中一些状态信息的查询,该表记录的信息与输出的信息类似通过显示引擎 INNODB 状态。另外,innodb缓冲池的一些状态变量也提供了一些相同的值

查看这个表需要进程权限。该表是Memory引擎的临时表

6. InnoDB层全文索引字典表

INNODB_FT_CONFIG:

提供有关 InnoDB 表 FULLTEXT 索引和关联元数据信息的查询。在查询该表之前,需要设置innodb_ft_aux_table='db_name/tb_name',其中db_name/tb_name是包含全文索引的表和库的名称。

查询该表的账户需要有PROCESS权限。该表是Memory引擎临时表

INNODB_FT_BEING_DELETED:

该表仅在OPTIMIZE TABLE语句中执行维护操作。期间作为INNODB_FT_DELETED表的快照数据存储。当运行OPTIMIZE TABLE语句时,INNODB_FT_BEING_DELETED表中的数据将首先被清除,INNODB_FT_DELETED表中的快照数据将被保存到INNODB_FT_BEING_DELETED表中,并且DOC_ID将从INNODB_FT_DELETED表中删除。由于INNODB_FT_BEING_DELETED表中的内容通常生命周期较短,因此该表中的数据对于moni来说并不是很有用测试或调试。

表中默认不记录数据。需要设置系统配置参数innodb_ft_aux_table=string(string代表db_name.tb_name字符串)、创建全文索引、设置停用词等。

查询该表的账号需要PROCESS允许。该表是Memory引擎临时表

INNODB_FT_DELETED:

提供查询从InnoDB表的FULLTEXT索引中删除行信息。它的存在是为了避免InnoDB中FULLTEXT在索引的DML操作期间执行昂贵的索引重组操作。全文索引中新删除的单词的信息将单独存储在该表中,在进行文本搜索时将从其中过滤掉搜索结果。该表中的信息仅在执行 OPTIMIZE TABLE 时才会使用。做出声明时清除。

默认情况下不记录该表中的信息。你需要使用e innodb_ft_aux_table 选项(该选项默认值为空字符串),指定需要记录哪些innodb引擎表信息,例如:test/test。

查询该表的帐户需要PROCESS权限。该表是Memory引擎的临时表。

INNODB_FT_DEFAULT_STOPWORD:

该表是默认的全文索引停用词。提供查询停用词列表值的表。要启用停用词表,需要启用参数innodb_ft_enable_stopword=ON。该参数默认为ON。启用停用词功能后,如果innodb_ft_user_stopword_table选项(对指定innodb引擎表中的全文索引有效)自定义了停用词表名称值,则停用词功能使用innodb_ft_user_stopword_table选项指定的停用词表。如果未指定 innodb_ft_user_stopword_table 选项,并且 innodb_ft_server_stopword_table 选项(对 full-所有innodb引擎表中的文本索引)自定义停用词表名称值,相同的停用词功能使用innodb_ft_server_stopword_table选项指定的停用词表。如果未指定innodb_ft_server_stopword_table选项,则使用默认的停止字表,即INNODB_FT_DEFAULT_STOPWORD表。

查询该表需要具有PROCESS权限的帐户。该表是Memory引擎临时表

INNODB_FT_INDEX_TABLE:

提供查询innodb表全文索引,用于反向倒排索引的分词信息,用于文本搜索。

查询该表的帐户需要PROCESS权限。该表是一个Memory引擎临时表

INNODB_FT_INDEX_CACHE:

提供对包含FULLTEXT索引新插入行的全文索引标记信息的innodb存储引擎表的查询。它的存在是为了避免 DML 操作期间昂贵的索引重组。信息新插入的全文索引词会单独存储在该表中,直到对该表执行 OP。只有在发出 TIMIZE TABLE 语句、或者服务器关闭时、或者大小达到该表的大小时才会执行清理操作。缓存中存储的信息超出了 innodb_ft_cache_size 或 innodb_ft_total_cache_size 系统配置参数指定的大小。默认情况下不记录数据。需要使用innodb_ft_aux_table系统配置参数来指定哪个表需要记录新插入行的全文索引数据。

查询该表的帐户需要PROCESS权限。该表是Memory引擎的临时表

7。 InnoDB层压缩相关字典表

INNODB_CMP和INNODB_CMP_RESET:

这两个表中的数据包含与压缩的InnoDB表页相关的操作的状态信息。表中记录的数据提供了参考用于测量数据库中 InnoDb 表压缩有效性的参考文献。

查询表的用户必须有PROCESS权限,这是一个Memory引擎临时表

INNODB_CMP_PER_INDEX和INNODB_CMP_PER_INDEX_RESET:

InnoDB压缩记录在这两个表中与表数据和索引相关的操作状态信息,针对数据库、表和索引的每种组合使用不同的统计信息,为评估特定表的压缩性能和实用性提供参考数据。

对于InnoDB压缩表,表中的数据和所有二级索引都被压缩。此时,表中的数据被视为另一个索引(包含所有数据列的聚集索引)。

注意:由于为每个索引收集单独的指标会导致显着的性能损失,因此默认情况下不会收集 INNODB_CMP_PER_INDEX 和 INNODB_CMP_PER_INDEX_RESET 表统计信息。如果有必要,只需 en可以通过系统配置参数innodb_cmp_per_index_enabled(该配置参数是动态变量,默认为OFF)。

查询该表的帐户需要PROCESS权限。该表是Memory引擎临时表

INNODB_CMPMEM和INNODB_CMPMEM_RESET:

这两个表中记录了InnoDB缓冲池中压缩页的状态信息,为衡量InnoDB表压缩在数据库中的有效性

查询表的账户需要PROCESS权限,并且该表是Memory引擎临时表

"如何理解和master mysq的l中“information_schema”的介绍到此结束,感谢您的阅读,如果您想了解更多行业资讯,可以关注网站,小编将为您输出更多优质实用文章!< /p>

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何理解和掌握mysql中的information_schema

用户评论