这些数据库不仅是MySQL系统的重要组成部分,还为数据库管理员(DBA)和用户提供了一系列系统级别的功能,以更好地管理和维护数据库系统
本文将深入探讨MySQL中的六个默认数据库:information_schema、mysql、performance_schema、sys、sakila以及test,解析它们的含义和作用
1. information_schema:数据库的元数据仓库 information_schema是MySQL中的一个特殊数据库,它包含了关于其他数据库、表、列、权限等信息的详细信息
这个数据库在MySQL中扮演着至关重要的角色,是访问和管理其他数据库的基础
information_schema数据库中的表种类繁多,各司其职
例如,SCHEMATA表提供了当前MySQL实例中所有数据库的信息,这相当于执行show databases命令的结果来源
TABLES表则提供了关于数据库中表的信息,包括表的类型、引擎、创建时间等,这类似于show tables from schemaname命令的结果
COLUMNS表详细描述了某个表的所有列及其信息,与show columns from schemaname.tablename命令的结果相对应
此外,USER_PRIVILEGES、SCHEMA_PRIVILEGES、TABLE_PRIVILEGES和COLUMN_PRIVILEGES等表提供了关于用户权限的详细信息,这些信息源自mysql数据库中的授权表
由于information_schema数据库保存了MySQL服务所有数据库的信息,包括数据库名、表名、列的数据类型与访问权限等,这对于数据库的日常管理和维护至关重要
管理员可以通过查询这些表来获取数据库的元数据,从而进行统计、监控和优化等操作
2. mysql:MySQL的核心数据库 mysql数据库是MySQL的核心数据库,它包含了MySQL的系统表和元数据,这些表记录了用户权限、序列号、配置信息等关键数据
这个数据库通常用于存储MySQL的系统信息,是MySQL服务器正常运行的关键组成部分
mysql数据库中的表种类繁多,功能各异
user表是用户全局权限表,记录了每个用户的权限信息
db表则是库级别权限表,记录了用户在特定数据库上的权限
tables_priv、columns_priv等表分别记录了表级别和列级别的权限信息
此外,procs_priv表存储了存储过程和函数的权限信息,proxies_priv表则记录了代理用户的权限
event表用于事件与任务调度,gtid表与GTID主从复制有关
innodb_index_stats和innodb_table_stats表分别记录了InnoDB索引和表的统计信息,这些信息对于查询优化器来说至关重要
plugin表则记录了MySQL插件的信息
由于mysql数据库包含了用于管理用户权限、日志记录和其他控制数据的系统表,这个数据库对于MySQL服务器的正常运行至关重要
任何对mysql数据库的修改都可能导致MySQL服务器的不稳定或安全问题,因此通常不建议直接修改默认数据库的内容
3. performance_schema:性能监控与分析 performance_schema数据库主要用于收集数据库服务器的性能参数,如事件等待、互斥锁、线程等信息
这为数据库性能优化提供了数据支持,帮助DBA和分析人员了解MySQL服务器的性能瓶颈和潜在问题
performance_schema中的表结构较为复杂,但按照相关标准进行事件统计
例如,events_waits_summary_by_instance、events_waits_summary_by_thread_by_event_name等表提供了关于等待事件的统计信息
file_summary_by_event_name和file_summary_by_instance表则提供了关于文件I/O操作的统计信息
setup_instruments表描述了可以监控的仪器(即性能计数器),而setup_timers表则描述了监控选项和采样频率的时间间隔
由于performance_schema中的信息较为复杂且表是只读的,官方特意简化了这个数据库的使用,并创建了sys数据库来提供更直观的视图和存储过程
然而,对于需要深入了解MySQL性能的用户来说,performance_schema仍然是一个不可或缺的宝库
4. sys:性能监控的简化视图 sys数据库是MySQL5.7及更高版本中引入的一个特殊数据库,它包含了一系列视图、存储过程和函数,用于帮助DBA更好地管理和维护MySQL服务器
sys数据库的所有数据都来自performance_schema,但这些视图简化了对performance_schema的查询,使得DBA能够更快速地了解数据库的运行情况
sys数据库中的视图种类繁多,功能各异
例如,TABLES视图保存了所有表的数据字典信息,包括表名、表引擎、表大小、表行数等有用信息
PROCESSLIST视图记录了会话详细信息,执行show processlist命令实际上就是在查询该视图
INNODB_TRX视图记录了所有事务的信息,包括事务是否被锁;而INNODB_LOCK_WAITS视图则记录了事务正在等待的锁的信息
由于sys数据库提供了对performance_schema的简化视图和存储过程,这使得DBA能够更轻松地监控和分析MySQL服务器的性能
此外,sys数据库还包含了一些用于性能调优和故障排除的实用工具,如statements_with_full_table_scans视图,它可以帮助DBA找出执行全表扫描的SQL语句
5. sakila:示例数据库 sakila是一个示例数据库,它包含了一系列用于演示MySQL功能的表和数据
这个数据库通常用于教学、培训和演示目的,帮助用户了解MySQL的基本功能和操作
sakila数据库中的表结构相对简单且易于理解
例如,actor表记录了演员的信息;film表记录了电影的信息;inventory表记录了电影的库存信息;rental表记录了租赁信息;payment表则记录了支付信息
这些表之间通过外键关联起来,形成了一个完整的电影租赁系统
由于sakila数据库是一个示例数据库,因此它并不包含任何敏感信息或生产数据
用户可以在这个数据库上进行各种操作和实验,而不会对生产环境造成任何影响
这使得sakila数据库成为一个非常有用的学习和演示工具
6. test:测试数据库 test数据库是一个空数据库,通常用于测试目的
这个数据库在MySQL安装后自动创建,但默认不包含任何表或数据
用户可以在这个数据库上进行各种测试操作,如创建表、插入数据、执行查询等,以验证MySQL的功能和性能
由于test数据库是一个空数据库且默认不包含任何敏感信息,因此它非常适合用于测试和开发目的
用户可以在这个数据库上进行各种实验和尝试,而不会对生产环境造成任何影响
这使得test数据库成为一个非常有用的测试和开发工具
总结 MySQL中的六个默认数据库各自扮演着不同的角色,共同构成了MySQL系统的核心部分
information_schema数据库提供了关于其他数据库的元数据信息;mysql数据库包含了MyS