在使用 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 系统数据库,包含内部数据结构视图。
!