当我们安装完mysql server时,可以查看用户和版本信息:

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.27    |
+-----------+
1 row in set (0.00 sec)

mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

我们查看数据库系统库可查看到如下信息。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | -- 数据库元数据信息,保存着所有其他数据库的信息,如数据库名和表
| mysql              | -- 数据库构建信息,由mysql_install_db脚本初始化,存储权限的表
| performance_schema | -- 数据库执行信息,在my.cnf中通过performance_schema使能进行性能监控, 5.7之后默认启用,可通过show variables like 'performance_schema'进行查看
| sys                | -- 数据库配置信息,主要是系统配置变量
+--------------------+
4 rows in set (0.01 sec)

根据版本不同,有时还会有test数据库。

我们可以用系统指令如'show table status from performance_schema;'查看这些系统数据库表情况。 我看到的表情况为:information_schema有79个表,mysql有37个表, performance_schema有110个表,sys有101个表。须知版本不同表的个数会有不同。

每个库中的表信息众多,我们仅介绍系统库中的一些关键表

information_schema中的关键表

schemata:当前mysql中所有数据库的信息
tables:关于数据库中的表的信息
columns:关于表中的列信息
user_privileges:关于用户权限的信息

mysql中的关键表

user:用户列、权限列、安全列、资源控制列的信息
db表:库级别权限表
tables_priv:表级权限
columns_priv:列级别全新表
procs_priv:存储过程与函数权限
proxies_priv:代理用户的权限
event:事件与任务调度表
gtid:与GTID主从复制有关的表
innodb_index_stats:innodb索引统计信息
innodb_table_stats:innodb表统计信息

一些常见的查询指令

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

mysql> SELECT table_schema,SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 FROM `information_schema`.`TABLES` GROUP BY table_schema;
+--------------------+-------------------------------------------------------+
| TABLE_SCHEMA       | SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 |
+--------------------+-------------------------------------------------------+
| information_schema |                                            0.00000000 |
| mysql              |                                            7.40478897 |
| performance_schema |                                            0.00000000 |
| sys                |                                            0.01562500 |
+--------------------+-------------------------------------------------------+
4 rows in set (0.07 sec)

查找出MySQL实例下非InnoDB的表

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

统计出MySQL实例下所有用户

mysql> SELECT CONCAT(USER,'@',HOST) FROM mysql.user;
+----------------------------+
| CONCAT(USER,'@',HOST)      |
+----------------------------+
| healthchecker@localhost    |
| mysql.infoschema@localhost |
| mysql.session@localhost    |
| mysql.sys@localhost        |
| root@localhost             |
+----------------------------+
5 rows in set (0.01 sec)

统计有全表扫描的SQL

mysql> SELECT * FROM sys.statements_with_full_table_scans LIMIT 1;
+-----------------------------------+-------+------------+---------------+---------------------+--------------------------+-------------------+-----------+---------------+---------------+-------------------+----------------------------+----------------------------+------------------------------------------------------------------+
| query                             | db    | exec_count | total_latency | no_index_used_count | no_good_index_used_count | no_index_used_pct | rows_sent | rows_examined | rows_sent_avg | rows_examined_avg | first_seen                 | last_seen                  | digest                                                           |
+-----------------------------------+-------+------------+---------------+---------------------+--------------------------+-------------------+-----------+---------------+---------------+-------------------+----------------------------+----------------------------+------------------------------------------------------------------+
| SELECT * FROM SYSTEM_USER LIMIT ? | mysql |          1 | 372.29 us     |                   1 |                        0 |               100 |         1 |             1 |             1 |                 1 | 2021-12-30 04:10:18.010672 | 2021-12-30 04:10:18.010672 | 9d743fabf75ba82c4039c405b9ace68b72cf66e35f11bff16b9fc2ce7919012d |
+-----------------------------------+-------+------------+---------------+---------------------+--------------------------+-------------------+-----------+---------------+---------------+-------------------+----------------------------+----------------------------+------------------------------------------------------------------+
1 row in set (0.00 sec)

查询系统库常用的系统指令有:

常用系统命令
desc tableName , describe tableName, show columns from tableName [from databaesName],show columns from databaseName.tableName --表字段信息
show create table tableName --表创建语句
show database databaseName --数据库创建语句
show table status from databaseName --显示库中表的情况
show tables [from databaseName] --显示数据库中所有表的表名
show databases --显示所有数据库名称
show processlist --显示系统中正在进行的所有进程,也就是正在执行的查询。
show table status [from databaseName] -- 显示数据库中所有表的详情。
show grants for userName@localhost -- 显示用户的授权语句
show index from [databaseName.]tableName --显示表的索引
show status --显示系统特定资源的信息,例如,正在运行的线程数量
show errors --显示最后一个执行语句产生的错误
show warngings --显示最后一个执行语句产生的错误,警告和通知。
show character set --显示可用字符集信息。
其他
show status like 'last_query_cost' --查询上一次查询SQL执行的开销,包括IO和CPU开销
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐