世界杯进球最多

在使用 MySQL 时,很多人关注的是业务数据库,却忽略了那些系统自动创建的“内置数据库”。它们不是多余的摆设,而是支撑 MySQL 正常运行的关键结构。

今天我们就带你详细解读 MySQL 中几个自带的系统数据库,了解它们的功能和作用,轻松迈入高级 DBA 的大门。

🏛️ 一览:MySQL 内置数据库都有谁?

数据库名

主要作用

mysql

用户权限与系统配置的核心库

information_schema

提供数据库结构的元数据(只读视图)

performance_schema

性能监控与 SQL 运行时统计

sys

简化性能调优的高级视图集合

innodb(MySQL 8.0.30+)

提供 InnoDB 存储引擎的底层信息

1️⃣ mysql:核心元数据中心

这是最关键的系统数据库之一,几乎所有权限管理、账号设置等系统配置都保存在这里。

常见表介绍:

user:存储所有用户账号及其权限。

db:控制用户对某个数据库的访问权限。

tables_priv / columns_priv:控制用户对表和列的操作权限。

time_zone 系列:处理时区信息。

help_topic 等:系统帮助文档索引。

📝 小提示:修改权限后记得执行 FLUSH PRIVILEGES,让变更立即生效!

2️⃣ information_schema:元数据查询的窗口

这是一个虚拟数据库,里面的数据来自于系统运行时的信息。它为你提供了数据库结构的全面视图,是开发调试时的好帮手。

常见视图示例:

SCHEMATA:当前所有数据库的列表。

TABLES / COLUMNS:查看所有表及其字段的详细信息。

STATISTICS:索引信息一览。

TRIGGERS / ROUTINES:查看触发器和存储过程。

3️⃣ performance_schema:性能分析利器

如果你想优化数据库性能,这个数据库你一定得了解。它记录了 SQL 执行、IO 等底层资源的详细数据。

它能干什么?

跟踪 SQL 执行的耗时

统计资源使用情况(内存、锁、线程等)

分析数据库等待瓶颈

代表性表:

events_statements_history:历史 SQL 语句执行信息。

events_waits_summary_by_instance:资源等待统计。

threads:连接线程详情。

📌 建议只在需要性能诊断时开启,避免对数据库本身性能造成影响。

4️⃣ sys:为 DBA 打造的贴心工具包

sys 数据库是在 performance_schema 和 information_schema 之上构建的一组视图,它让性能分析变得更简单直观。

常用视图:

sys.processlist:代替 SHOW PROCESSLIST,更美观更实用。

sys.user_summary:统计每个用户的连接和资源使用。

sys.schema_table_statistics:表操作统计,便于发现热点表。

📈 对 DBA 而言,这是快速定位性能瓶颈的利器。

5️⃣ innodb(MySQL 8.0.30+ 新增):InnoDB 内部结构探秘

这是一个新的系统库,专门用于查看 InnoDB 存储引擎的底层结构和状态信息。

可以查看:

Undo/Redo 日志状态

表空间信息

事务历史

适合进行深度优化和高级诊断,尤其在处理复杂事务和锁竞争时非常有用。

✅ 总结一下:

使用场景

推荐数据库

权限与账号管理

mysql

查看数据结构

information_schema

分析性能问题

performance_schema + sys

深度诊断 InnoDB

innodb(8.0.30+)

🧪 实战案例一:用 mysql 数据库管理用户权限

场景:你想创建一个只能访问 sales_db 数据库的普通查询用户。

操作步骤:

-- 创建用户

CREATE USER 'report_user'@'%' IDENTIFIED BY 'securePass123';

-- 授权访问某个库的只读权限

GRANT SELECT ON sales_db.* TO 'report_user'@'%';

-- 查看权限是否生效(查看 mysql.db 表)

SELECT * FROM mysql.db WHERE User = 'report_user';

实战技巧:

权限修改完成后,执行 FLUSH PRIVILEGES; 让其立即生效。

可以手动检查 mysql.user 或 mysql.db 表确认授权是否正确。

🧪 实战案例二:用 performance_schema 分析慢 SQL

场景:你发现数据库响应慢,怀疑某些 SQL 执行效率低。

操作步骤:

-- 查询最近执行过的慢 SQL

SELECT

DIGEST_TEXT,

COUNT_STAR AS exec_count,

SUM_TIMER_WAIT/1000000000000 AS total_exec_time_sec

FROM performance_schema.events_statements_summary_by_digest

ORDER BY SUM_TIMER_WAIT DESC

LIMIT 5;

实战技巧:

结合 sys.statement_analysis 视图更直观。

可用于定位慢查询热点(如重复执行频繁或单次耗时长的语句)。

🧪 实战案例三:用 information_schema 审计表结构

场景:你需要检查所有表中是否存在没有主键的表,以避免潜在性能问题。

SQL 示例:

SELECT

TABLE_SCHEMA,

TABLE_NAME

FROM information_schema.tables

WHERE TABLE_TYPE = 'BASE TABLE'

AND TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')

AND TABLE_NAME NOT IN (

SELECT DISTINCT TABLE_NAME

FROM information_schema.table_constraints

WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'

);

实战技巧:

该查询帮助开发或 DBA 对库进行结构健康检查。

可结合自动巡检脚本每月执行一次。

📚 官方文档参考资料

MySQL :: MySQL 8.0 Reference Manual – Chapter 5.1: The mysql System Schema

https://dev.mysql.com/doc/refman/8.0/en/mysql-database.html

MySQL :: MySQL 8.0 Reference Manual – Chapter 25: The INFORMATION_SCHEMA Database

https://dev.mysql.com/doc/refman/8.0/en/information-schema.html

MySQL :: MySQL 8.0 Reference Manual – Chapter 26: The PERFORMANCE_SCHEMA Storage Engine

https://dev.mysql.com/doc/refman/8.0/en/performance-schema.html

MySQL :: MySQL 8.0 Reference Manual – Chapter 27: The sys Schema

https://dev.mysql.com/doc/refman/8.0/en/sys-schema.html

MySQL :: MySQL 8.0 Reference Manual – Chapter 28: The InnoDB Storage Engine

https://dev.mysql.com/doc/refman/8.0/en/innodb-introduction.html

MySQL :: What's New in MySQL 8.0.30

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-30.html

说明:MySQL 8.0.30 开始引入了 innodb 系统数据库,包含内部数据结构视图。