漫谈MySQL七-系统数据库mysql库详解
发布时间:2022-10-08 10:48:13 所属栏目:MySql教程 来源:
导读: 大家好,我是王老狮,Mysql库是数据库的核心,它存储了 MySQL 的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。今天我们就来聊聊mysql库中的一
|
大家好,我是王老狮,Mysql库是数据库的核心,它存储了 MySQL 的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。今天我们就来聊聊mysql库中的一些重要的表。
1.权限系统表
因为权限管理是 DBA 的职责,所以对于这个部分的表,我们大概了解下即可。在 mysql 系统库中,MySQL 访问权限系统表,放在 mysql 库中,主要包含如下几个表。
提示:要更改权限表的内容mysql系统,应该使用账号管理语句(如:CREATE USER、GRANT、REVOKE 等)来间接修改,不建议直接使用 DML 语句修改权限表。
2.统计信息表
持久化统计功能是通过将内存中的统计数据存储到磁盘中,使其在数据库重启时可以快速重新读入这些统计信息而不用重新执行统计,从而使得查询优化器可以利用这些持久化的统计信息准确地选择执行计划(如果没有这些持久化的统计信息,那么数据库重启之后内存中的统计信息将会丢失,下一次访问到某库某表时,需要重新计算统计信息,并且重新计算可能会因为估算值的差异导致查询计划发生变更,从而导致查询性能发生变化)。
如何启用统计信息的持久化功能呢?当innodb_stats_persistent = ON 时全局的开启统计信息的持久化功能,默认是开启的.
show variables like 'innodb_stats_persistent';
如果要单独关闭某个表的持久化统计功能,则可以通过 ALTER TABLE tbl_name STATS_ PERSISTENT = 0 语句来修改。
2.1.innodb_table_stats
innodb_table_stats 表提供查询与表数据相关的统计信息。
select * from innodb_table_stats where table_name = 'order_exp'\G
其中的估算数据记录行数,页为单位的估算数值等等.
2.2.innodb_index_stats
innodb_index_stats 表提供查询与索引相关的统计信息。
select * from innodb_index_stats where table_name = 'order_exp';
表字段含义如下。
注意,上述的描述中出现的诸如叶子页,索引的最前索引列等等,以及这个统计表的具体作用,后续单独拿出来给大家详解。
3.日志记录表
MySQL 的日志系统包含:普通查询日志、慢查询日志、错误日志(记录服务器启动时、运行中、停止时的错误信息)、二进制日志(记录服务器运行过程中数据变更的逻辑日志)、中继日志(记录从库 I/O 线程从主库获取的主库数据变更日志)、DDL 日志(记录 DDL 语句执行时的元数据变更信息。在 MySQL 5.7 中只支持写入文件中,在 MySQL 8.0 中支持写入 innodb_ddl_log 表中。在 MySQL5.7 中,只有普通查询日志、慢查询日志支持写入表中(也支持写入文件中),可以通过 log_output=TABLE 设置保存到 mysql.general_log 表和 mysql.slow_log 表中, 其他日志类型在 MySQL 5.7 中只支持写入文件中。
3.1.general_log
general_log 表提供查询普通 SQL 语句的执行记录信息,用于查看客户端到底在服务器上执行了什么 SQL 语句。默认不开启
show variables like 'general_log';
开启
set global log_output='TABLE'; -- 'TABLE,FILE'表示同时输出到表和文件set global
general_log=on;
show variables like 'general_log';
任意执行一个查询后
?select * from mysql.general_log\G
3.2.slow_log
slow_log 表提供查询执行时间超过 long_query_time 设置值的 SQL 语句、未使用索引的语句(需要开启参数 log_queries_not_using_indexes=ON)或者管理语句(需要开启参数 log_slow_admin_statements=ON)。
更详细的信息,我们在 SQL 优化的部分再了解。
4.复制信息表
复制信息表在从库复制主库的数据期间,用于保存从主库转发到从库的binlog(二进制日志)事件,记录有关 relay log(中继日志)当前状态和位置的信息。我们大致了解即可。
master.info 文件或者 mysql.slave_master_info 表:用于保存从库的 I/O 线程连接主库的连接状态、账号、IP 地址、端口、密码,以及 I/O 线程当前读取主库binlog 的文件和位置信息(称为 I/O 线程信息日志)。在默认情况下,I/O 线程的连接信息和状态保存在 master.info 文件中(默认位置在 datadir 下,可以使用master_info_file 参数指定 master.info 文件路径。注:在 MySQL 5.7.x 较新的版本以及 8.0.x 版本中该参数已经被移除)。如果需要保存在 mysql.slave_master_info 表中,则需要在服务器启动之前设置 master_info_repository=TABLE。
relay_log.info 文件或者 mysql.slave_relay_log_info 表:当从库的 I/O 线程从主库获取到最新的 binlog 事件信息后会先写入从库本地的 relay log 中,然后SQL 线程再去读取 relay log 解析并重放。relay_log.info 文件或者mysql.slave_relay_log_info 表就是用于记录最新的 relay log 的文件和位置,以及SQL 线程当前重放的事件对应的主库 binlog 的文件和位置信息的(SQL 线程位置被称为 SQL 线程信息日志)。在默认情况下,relay log 的位置信息和 SQL 线程的位置信息保存在 relay-log.info 文件中(默认位置在 datadir 下,可以使用relay_log_info_file 选项指定 relay-log.info 文件路径)。如果需要保存在mysql.slave_relay_log_info 表中,则需要在服务器启动之前设置relay_log_info_repository=TABLE。 (编辑:我爱制作网_池州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330577号