MySQL 5.7 内置了几个重要的系统数据库,这些数据库主要用于存储元数据、权限信息以及性能监控数据等,不直接用于存储用户数据。以下是主要的内置数据库及其用途和简单使用示例:
- information_schema
- 用途: 存储了关于MySQL服务器所维护的所有其他数据库的信息,如表定义、列数据类型、权限等。用户可以通过这个数据库查询到数据库的结构而不直接访问底层文件。
- 使用示例:
-- 查询所有数据库的名称
SELECT SCHEMA_NAME FROM information_schema.SCHEMATA;
-- 查询某个数据库中所有表的信息
SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name';
- mysql
- 用途: 存储了MySQL的用户账号、权限设置、以及系统变量等元数据。
- 使用示例:
-- 查询所有用户账户
SELECT User, Host FROM mysql.user;
-- 更改用户的密码
UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'username' AND Host = 'localhost';
FLUSH PRIVILEGES;
- performance_schema
- 用途: 用于收集数据库服务器的性能数据,如查询事件、锁等待、临时表使用情况等,是性能监控和调优的重要来源。
- 使用示例:
-- 查看最耗时的SQL摘要
SELECT DIGEST_TEXT, SUM_TIMER_WAIT/1000000 AS Total_Wait_Time_ms
FROM performance_schema.events_statements_summary_by_digest
ORDER BY Total_Wait_Time_ms DESC LIMIT 10;
- sys
- 用途: 是一个虚拟的数据库,不直接存储数据,而是提供了一系列视图,用于简化性能监控和故障排查。它基于
performance_schema
和information_schema
中的数据。 - 使用示例:
-- 查找最占空间的前10个表
SELECT *
FROM sys.schema_table_statistics_with_buffer
ORDER BY data_length + index_length DESC
LIMIT 10;
- sys_config (在某些版本中)
- 用途: 存储了系统配置变量的状态,允许动态修改某些系统变量的默认值。
- 使用示例:
-- 查看sys_config表内容(如果存在)
SELECT * FROM sys.sys_config;
请注意,使用这些内置数据库时,特别是进行写操作(如更新用户权限),应当非常谨慎,以避免破坏MySQL的正常运行。在进行任何更改之前,确保有完整的备份,并充分理解所执行命令的后果。