mysql 默认数据库的用处_MySQL基础教程(12)MySQL默认系统库的作用与实际运用

一、MySQL服务默认数据库介绍

在MySQL初始化完成后会创建出4个系统库,分别是information_schema、performance_schema、mysql、sys。这些系统库主要记录了MySQL服务自身的信息,比如MySQL所创建的用户信息、库表信息等,对DBA工作有非常大的用处。

1、mysql库

MySQL服务的核心数据库,主要存储了数据库用户、权限等信息,如果将慢日志或者通用日志调整成table形式也存在这个库里。

user表:用户全局权限表,记录了每个用户权限

select * from mysql.user where user='tanglu' \G

db表:库级别权限表

select * from mysql.user where user='tanglu' \G #查询tanglu用户库级别的权限

tables_priv:表级权限

columns_priv:列级别全新表

procs_priv:存储过程与函数权限

proxies_priv:代理用户的权限

event:事件与任务调度表

gtid:与GTID主从复制有关的表

innodb_index_stats:innodb索引统计信息

innodb_table_stats:innodb表统计信息

plugin:插件表

2、performance_schema库

用于收集数据库服务器性能数据,以便分析问题。比如哪个SQL执行次数最多、耗时最长、哪个SQL被锁等有用的信息

3、sys库

由于performance_schema中的信息较为复杂,官方特意将performance_schema做了简化,最终形成了一个sys库。sys库的所有数据都是来自performancce_schema,这些视图简化了对performancce_schema的查询,便于更快速了解数据库运行情况。

4、information_schema库

这个库也被称为MySQL的数据字典,存放了所有的元数据信息,比如所有的数据库、表、索引,甚至每个会话信息也在该库中记录。通过这个库可以进行一些数据资产统计,比如有多少个库、多少表、占用了多大的硬盘空间等。需要注意的是这个库并没有将数据持久化到硬盘中,所以并不会生成这个库的数据目录,也不能进行DML操作对数据进行修改。

TABLES表:保存了所有表的数据字典信息,比如表名、表引擎、表大小、表行数等等有用信息

PROCESSLIST表:记录了会话详细信息,执行show processlist命令其实就是在查询该表

INNODB_TRX表:记录了所有事务,包括事务是否被锁

INNODB_LOCK_WAITS:记录了事务正在等待的锁的信息

二、MySQL默认库的实际运用案例

1、统计MySQL实例下每个库中所有表的表名以及个数

SELECT table_schema,COUNT(table_name),GROUP_CONCAT(table_name) FROM `information_schema`.`tables` GROUP BY table_schema;

2、统计MySQL实例下每个库占用空间总大小,并以MB为单位显示

SELECT table_schema,SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 FROM `information_schema`.`TABLES` GROUP BY table_schema;

3、查找出MySQL实例下非InnoDB的表

SELECT table_schema,table_name FROM information_schema.tables WHERE ENGINE !='InnoDB' AND table_schema NOT IN ('sys','performance_schema','information_schema','mysql');

4、统计出MySQL实例下所有用户

SELECT CONCAT(USER,'@',HOST) FROM mysql.user;

5、查询当前MySQL中会话信息,相比使用show processlist命令直接查看,用SQL的形式能灵活的进行过滤

select * from information_schema.processlist where time > 50;

select * from information_schema.processlist where info like 'my query%';

6、批量杀死某个用户的进程

select concat('KILL ',id,';') from information_schema.processlist where user='your_user_name';

7、查看当前正在运行的SQL

SELECT conn_id,USER,current_statement,last_statement FROM sys.session

8、统计有全表扫描的SQL

SELECT * FROM sys.statements_with_full_table_scans LIMIT 10


版权声明:本文为weixin_36062602原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。