Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL自带系统数据库功能

MySQL数据库自带系统数据库功能超详细介绍

作者:五老新

MySQL能够存储和管理大量的结构化数据,支持多种数据类型,下面这篇文章主要介绍了MySQL数据库自带系统数据库功能的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

MySQL自带的系统数据库是数据库管理的核心组成部分,主要包含mysqlinformation_schemaperformance_schemasys,它们不用于存储业务数据,而是用于存储系统元数据、权限信息和性能监控数据。这些系统数据库是MySQL正常运行和高效管理的关键。

一、mysql

mysql是 MySQL 的核心系统数据库,它是 MySQL 服务器运行的"大脑"。这个数据库存储了所有与用户权限系统配置元数据相关的信息,是 MySQL 正常运行的关键。

1. 核心特性

2. 核心表

表分类表名用途说明
用户权限管理user存储全局用户账户及权限信息包含用户名、主机名、加密密码、全局权限(如SELECT_priv、INSERT_priv)等字段,是数据库安全控制的核心
数据库级权限db管理数据库级别的访问权限指定用户对特定数据库的操作权限(如CREATE、DROP),权限粒度细化到数据库级别
表级权限tables_priv控制表级别的操作权限记录用户对具体表的权限(如UPDATE、DELETE),支持更细粒度的权限管理
列级权限columns_priv实现列级别的访问控制定义用户对表中特定列的权限(如仅允许修改某列数据),实现精细化权限管理
程序对象权限procs_priv管理存储过程/函数权限存储用户对存储过程和函数的执行权限,控制程序对象的访问
代理权限proxies_priv管理代理用户权限允许一个用户以另一个用户身份执行操作,支持权限代理机制
服务器配置servers存储服务器配置信息记录MySQL服务器实例的配置参数,如服务器地址、端口等
事件调度器event管理事件调度器信息包含事件名称、执行时间表达式、状态(ENABLED/DISABLED)等,用于定时任务管理
时区信息time_zone存储时区配置包含时区名称、时区偏移量、是否启用等信息,支持多时区应用
时区转换time_zone_leap_second记录闰秒信息存储闰秒发生时间及调整值,确保时间计算的准确性
时区名称映射time_zone_name时区名称与ID映射关联时区名称与内部标识符,方便时区查询
时区偏移time_zone_transition时区转换历史记录时区偏移量的历史变化,支持时间相关计算
插件管理plugin存储已安装插件信息包含插件名称、状态(ACTIVE/INACTIVE)、版本、描述等,支持插件扩展
服务器变量global_variables存储全局服务器变量包含变量名(如max_connections)、当前值、默认值等,影响服务器行为
会话变量session_variables存储会话级变量与全局变量类似,但仅影响当前会话,支持个性化配置
帮助信息help_topic存储帮助主题信息包含帮助主题ID、名称、描述等,支持内置帮助系统
帮助内容help_relation关联帮助主题与内容映射帮助主题与详细内容的关联关系,构建帮助系统框架
帮助类别help_category管理帮助分类定义帮助信息的分类体系,方便用户按类别查询帮助
慢查询日志slow_log记录慢查询信息存储执行时间超过阈值的SQL语句,用于性能分析(需启用慢查询日志功能)

3. 权限管理说明

3.1. 权限层次结构

MySQL 的权限是分层管理的,从高到低依次为:

3.2. 权限类型

权限类型说明作用范围
SELECT查询数据全局、数据库、表、列
INSERT插入数据全局、数据库、表、列
UPDATE更新数据全局、数据库、表、列
DELETE删除数据全局、数据库、表、列
CREATE创建数据库/表全局、数据库
DROP删除数据库/表全局、数据库
GRANT OPTION授予权限全局、数据库
CREATE TEMPORARY TABLES创建临时表全局、数据库
LOCK TABLES锁定表全局、数据库
CREATE VIEW创建视图全局、数据库
SHOW VIEW查看视图全局、数据库
EXECUTE执行存储过程全局、数据库、表

4. 常用操作

4.1. 查看所有用户

SELECT User, Host FROM mysql.user;

4.2. 授予权限

-- 授予用户对test数据库的SELECT权限
GRANT SELECT ON test.* TO 'user'@'localhost';

-- 授予用户对所有数据库的SELECT权限
GRANT SELECT ON *.* TO 'user'@'localhost';

-- 授予用户对特定表的权限
GRANT SELECT, INSERT ON test.users TO 'user'@'localhost';

-- 授予用户对特定列的权限
GRANT SELECT (name, email) ON test.users TO 'user'@'localhost';

4.3. 查看特定用户的权限

-- 查看用户权限
SHOW GRANTS FOR 'user'@'localhost';

-- 查看用户权限的详细信息
SELECT * FROM mysql.user WHERE User = 'user' AND Host = 'localhost';

4.4. 修改权限

-- 修改用户密码
ALTER USER 'user'@'localhost' IDENTIFIED BY 'new_password';

-- 重置密码
SET PASSWORD FOR 'user'@'localhost' = PASSWORD('new_password');

-- 刷新权限
FLUSH PRIVILEGES;

4.5. 删除用户权限

-- 删除用户权限
REVOKE SELECT ON test.* FROM 'user'@'localhost';

-- 删除用户
DROP USER 'user'@'localhost';

5. 常见问题

5.1. 无法登录

5.2. 权限不生效

5.3. 密码重置

-- 停止MySQL服务
sudo systemctl stop mysql

-- 以跳过权限检查的方式启动
sudo mysqld_safe --skip-grant-tables &

-- 登录MySQL
mysql -u root

-- 重置密码
USE mysql;
UPDATE user SET authentication_string = PASSWORD('new_password') WHERE User = 'root';

-- 重启MySQL服务
sudo systemctl restart mysql

二、information_schema

information_schema是 MySQL 的核心系统数据库,它提供了一个虚拟数据库,其中包含所有数据库的元数据信息。这个数据库不存储实际业务数据,而是提供关于数据库结构、表、列、索引、视图等的描述性信息。

1. 核心特性

2. 核心视图

视图分类视图名称用途说明
数据库元数据SCHEMATA查看数据库列表及属性包含所有数据库名称、默认字符集、排序规则等信息
表元数据TABLES查看表及视图基本信息包含表所属数据库、表名、存储引擎、创建时间、更新时间等
列元数据COLUMNS查看表列详细信息包含列所属表、列名、数据类型、是否允许NULL、默认值、字符最大长度等
索引元数据STATISTICS查看表索引信息包含索引所属表、索引名、列名、索引顺序、索引类型(如BTREE)等
权限管理USER_PRIVILEGES查看用户全局权限包含用户账号、权限类型(如SELECT)、是否可授权等
存储过程/函数ROUTINES查看存储过程和函数包含名称、类型(PROCEDURE/FUNCTION)、所属数据库、创建时间等
触发器TRIGGERS查看触发器信息包含触发器所属表、事件类型(INSERT/UPDATE/DELETE)、触发时机(BEFORE/AFTER)等
事件调度器EVENTS查看事件调度器信息包含事件名称、所属数据库、执行时间表达式、状态(ENABLED/DISABLED)等
字符集与排序CHARACTER_SETS查看支持的字符集包含字符集名称、默认排序规则、描述等
排序规则COLLATIONS查看排序规则信息包含排序规则名称、字符集、是否区分大小写、是否区分重音等
表约束KEY_COLUMN_USAGE查看表约束关系包含约束类型(PRIMARY KEY/FOREIGN KEY)、关联表、关联列等
分区表PARTITIONS查看分区表信息包含表名、分区名、分区方法(RANGE/HASH)、分区表达式等
插件管理PLUGINS查看已安装插件包含插件名称、状态(ACTIVE/INACTIVE)、版本、描述等
服务器参数GLOBAL_VARIABLES查看全局服务器变量包含变量名(如max_connections)、当前值、默认值等
会话参数SESSION_VARIABLES查看会话级变量与GLOBAL_VARIABLES类似,但针对当前会话
引擎信息ENGINES查看存储引擎支持情况包含引擎名称(如InnoDB)、支持状态(DEFAULT/YES/NO)、描述等
表空间TABLESPACES查看表空间信息包含表空间名称、引擎、文件路径、空间大小等
锁信息TABLE_CONSTRAINTS查看表约束类型包含表名、约束类型(PRIMARY KEY/UNIQUE/FOREIGN KEY)等
外键关系REFERENTIAL_CONSTRAINTS查看外键关联关系包含父表、子表、关联列、更新/删除规则等
视图定义VIEWS查看视图定义详情包含视图所属数据库、视图名、定义SQL语句、是否可更新等

3. 常用操作

3.1. 查询所有数据库

SELECT SCHEMA_NAME AS `Database`
FROM information_schema.SCHEMATA;

3.2. 查询特定数据库的所有表

SELECT TABLE_NAME AS `Table`
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_database_name';

3.3. 查询表结构

SELECT 
    COLUMN_NAME AS `Column`,
    DATA_TYPE AS `Type`,
    IS_NULLABLE AS `Nullable`,
    COLUMN_KEY AS `Key`,
    COLUMN_DEFAULT AS `Default`,
    EXTRA AS `Extra`
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_NAME = 'your_table_name';

3.4. 查询索引信息

SELECT 
    INDEX_NAME AS `Index`,
    COLUMN_NAME AS `Column`,
    SEQ_IN_INDEX AS `Seq`,
    NON_UNIQUE AS `NonUnique`
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_NAME = 'your_table_name';

3.5. 查询外键关系

SELECT 
    CONSTRAINT_NAME AS `Constraint`,
    REFERENCED_TABLE_NAME AS `Referenced Table`,
    REFERENCED_COLUMN_NAME AS `Referenced Column`
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'your_database_name'
AND TABLE_NAME = 'your_table_name'
AND REFERENCED_TABLE_NAME IS NOT NULL;

3.6. 查询视图定义

SELECT 
    TABLE_NAME AS `View`,
    VIEW_DEFINITION AS `Definition`
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA = 'your_database_name';

3.7. 数据库结构比较

-- 比较两个数据库的表结构差异
SELECT 
    TABLE_NAME,
    COLUMN_NAME,
    DATA_TYPE AS source_type,
    (SELECT DATA_TYPE 
     FROM information_schema.COLUMNS 
     WHERE TABLE_SCHEMA = 'target_db' 
     AND TABLE_NAME = source.TABLE_NAME 
     AND COLUMN_NAME = source.COLUMN_NAME) AS target_type
FROM information_schema.COLUMNS source
WHERE TABLE_SCHEMA = 'source_db'
AND (SELECT DATA_TYPE 
     FROM information_schema.COLUMNS 
     WHERE TABLE_SCHEMA = 'target_db' 
     AND TABLE_NAME = source.TABLE_NAME 
     AND COLUMN_NAME = source.COLUMN_NAME) IS NULL
OR (SELECT DATA_TYPE 
    FROM information_schema.COLUMNS 
    WHERE TABLE_SCHEMA = 'target_db' 
    AND TABLE_NAME = source.TABLE_NAME 
    AND COLUMN_NAME = source.COLUMN_NAME) <> source.DATA_TYPE;

三、performance_schema

performance_schema是 MySQL 5.5 版本引入的核心性能监控工具,用于收集 MySQL 服务器运行时的底层事件信息。它也是一个虚拟数据库,数据存储在内存中,重启后会丢失。它和慢查询日志不同,它提供的是实时、细粒度的性能数据,而不是事后分析的慢查询记录。

1. 核心特性

2. 核心运行机制

3. 核心表

表分类表名用途说明
语句事件记录events_statements_current记录当前执行的SQL详细信息如执行时间、扫描行数、锁等待等
语句事件记录events_statements_history记录最近完成的SQL历史按线程分组,存储最近10条执行记录
语句事件记录events_statements_history_long全局SQL历史记录存储所有线程的SQL执行情况,最多10000条
语句事件记录events_statements_summary_by_digestSQL摘要聚合统计按SQL指纹分组,统计执行次数、总耗时、平均耗时等
等待事件记录events_waits_current当前资源等待事件如锁等待、I/O等待、线程同步等
等待事件记录events_waits_history最近完成的等待事件按线程分组,存储最近10条等待记录
等待事件记录events_waits_history_long全局等待事件历史存储所有线程的等待事件,最多10000条
等待事件记录events_waits_summary_by_event_name按事件名称聚合统计如锁等待次数、总耗时、平均耗时等
阶段事件记录events_stages_current当前SQL执行阶段如解析、优化、执行等阶段
阶段事件记录events_stages_history历史阶段事件按线程分组,存储最近10条阶段记录
阶段事件记录events_stages_history_long全局阶段事件历史存储所有线程的阶段事件,最多10000条
阶段事件记录events_stages_summary_by_event_name按阶段名称聚合统计如解析阶段耗时、执行阶段耗时等
事务事件记录events_transactions_current当前执行的事务信息如事务ID、状态、开始时间等
事务事件记录events_transactions_history最近完成的事务历史按线程分组,存储最近10条事务记录
事务事件记录events_transactions_history_long全局事务历史存储所有线程的事务记录,最多10000条
事务事件记录events_transactions_summary_by_transaction事务级别统计如提交次数、回滚次数、事务耗时等
内存事件记录memory_summary_by_account_by_event_name按账户和事件统计内存如分配次数、释放次数、内存使用量等
内存事件记录memory_summary_by_host_by_event_name按主机和事件统计内存如内存分配、释放、使用量等
内存事件记录memory_summary_by_thread_by_event_name按线程和事件统计内存如线程内存使用情况、内存泄漏检测等
内存事件记录memory_summary_global_by_event_name全局内存使用统计如总分配量、总释放量、当前使用量等
文件I/O事件file_summary_by_event_name按事件统计文件I/O如读写次数、耗时、数据量等
文件I/O事件file_summary_by_instance按文件实例统计I/O如文件读写次数、耗时、数据量等
文件I/O事件table_io_waits_summary_by_table按表统计I/O等待如表读写等待次数、耗时等
配置表setup_instruments配置事件采集项启用/禁用特定事件监控,如锁、I/O、SQL执行等
配置表setup_consumers配置数据存储目标控制是否记录历史、摘要或全局数据
配置表setup_timers配置计时器类型如CPU时间、线程时间、墙钟时间等
配置表setup_actors配置用户/主机监控设置用户和主机的监控权限
其他表threads服务器线程信息如线程ID、类型、状态、CPU使用率等
其他表users用户信息如用户名、主机、权限等
其他表variables_by_thread线程变量使用如线程级变量值、默认值、是否修改等
其他表mutex_instances互斥同步对象实例记录系统中使用互斥量对象的所有记录,name为wait/synch/mutex/*
其他表rwlock_instances读写锁同步对象实例记录系统中使用读写锁对象的所有记录,name为wait/synch/rwlock/*
其他表socket_instances活跃会话对象实例记录thread_id, socket_id, ip和port,用于关联应用与数据库

4. 常用操作

4.1. 检查是否已启用

SHOW VARIABLES LIKE 'performance_schema';
-- 默认值为 ON(MySQL 5.7+)

4.2. 开启特定监控项

-- 开启所有事件的监控(谨慎使用,可能影响性能)
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES';

-- 按需开启特定监控(推荐)
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' 
WHERE NAME LIKE 'events_statements%'; -- 开启SQL语句监控

4.3. 配置监控粒度

-- 监控所有用户的SQL语句
UPDATE performance_schema.setup_actors SET ENABLED = 'YES', HISTORY = 'YES' 
WHERE USER = '%';

4.4. 查看最耗时的SQL语句

SELECT 
    DIGEST_TEXT AS 'SQL语句',
    COUNT_STAR AS '执行次数',
    SUM_TIMER_WAIT / 1e9 AS '总耗时(秒)',
    AVG_TIMER_WAIT / 1e9 AS '平均耗时(秒)'
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;

4.5. 查看最近执行的SQL详情

SELECT 
    EVENT_ID,
    SQL_TEXT AS 'SQL语句',
    TIMER_WAIT / 1e9 AS '耗时(秒)',
    LOCK_TIME / 1e9 AS '锁等待时间(秒)',
    ROWS_EXAMINED AS '扫描行数',
    ROWS_SENT AS '返回行数'
FROM performance_schema.events_statements_history
ORDER BY TIMER_WAIT DESC
LIMIT 10;

4.6. 分析I/O瓶颈

SELECT 
    EVENT_NAME AS '事件类型',
    COUNT_STAR AS '次数',
    SUM_TIMER_WAIT / 1e9 AS '总等待时间(秒)',
    AVG_TIMER_WAIT / 1e9 AS '平均等待时间(秒)'
FROM performance_schema.file_summary_by_event_name
WHERE EVENT_NAME LIKE '%read%'
ORDER BY SUM_TIMER_WAIT DESC;

4.7. 监控长期运行事务

SELECT 
    THREAD_ID,
    EVENT_ID,
    SQL_TEXT,
    TIMER_START,
    TIMER_WAIT / 1e9 AS '已运行时间(秒)'
FROM performance_schema.events_transactions_current
WHERE STATE = 'ACTIVE'
ORDER BY TIMER_WAIT DESC;

四、sys

sys是MySQL 5.7.7+ 引入的一个辅助库,旨在简化数据库管理员(DBA)和开发者的性能监控与诊断工作。它基于performance_schema和information_schema,通过视图、存储过程和函数的形式,提供更直观、易用的数据库性能和元数据信息。

sys 是 MySQL 的"性能分析助手",它将复杂的性能数据转换为易于理解的视图,让数据库管理员和开发人员能够快速识别和解决性能问题。

1. 核心特性

2. 主要内容

2.1. 视图(Views)

sys库包含大量视图,按功能可分为以下几类:

视图命名规则:大部分视图成对出现,带x$前缀的视图显示原始数据(如皮秒单位),不带前缀的视图显示经过单位换算的数据(如毫秒、秒)。 比如:host_summary_by_file_io(换算后)与x$host_summary_by_file_io(原始数据)。

2.2. 存储过程(Procedures)

用于动态配置performance_schema的监控项,例如:

2.3. 函数(Functions)

提供格式化输出功能,例如:

3. 常用操作

3.1. 排查慢查询

-- 查看执行时间最长的10个查询
SELECT * FROM sys.statement_analysis 
ORDER BY total_latency DESC 
LIMIT 10;

3.2. 识别热点表

-- 查看操作最频繁的表
SELECT * FROM sys.schema_table_statistics 
ORDER BY rows_fetched + rows_inserted + rows_updated + rows_deleted DESC 
LIMIT 10;

3.3. 分析锁等待

-- 查看当前锁等待链
SELECT * FROM sys.innodb_lock_waits;

3.4. 监控IO性能

-- 按主机统计文件IO延迟
SELECT * FROM sys.host_summary_by_file_io 
ORDER BY io_latency DESC;

3.5. 查看使用临时表的查询

SELECT 
    DIGEST_TEXT AS 'SQL语句',
    COUNT_STAR AS '执行次数',
    SUM_CREATED_TMP_DISK_TABLES AS '磁盘临时表次数',
    SUM_CREATED_TMP_TABLES AS '临时表总数'
FROM sys.statements_with_temp_tables
ORDER BY SUM_CREATED_TMP_TABLES DESC
LIMIT 10;

3.6. 查看当前活动链接

SELECT 
    ID, 
    USER, 
    HOST, 
    DB, 
    COMMAND, 
    TIME, 
    STATE, 
    INFO
FROM sys.processlist
ORDER BY TIME DESC;

3.7. 查看内存使用情况

SELECT 
    EVENT_NAME AS '内存事件',
    COUNT_STAR AS '次数',
    SUM_NUMBER_OF_BYTES_USED / 1024 / 1024 AS '总内存(MB)'
FROM sys.memory_global_by_current_bytes
ORDER BY SUM_NUMBER_OF_BYTES_USED DESC
LIMIT 10;

3.8. 查看索引使用情况

SELECT 
    TABLE_SCHEMA AS '数据库',
    TABLE_NAME AS '表名',
    INDEX_NAME AS '索引名',
    SEQ_IN_INDEX AS '索引顺序',
    COLUMN_NAME AS '列名',
    CARDINALITY AS '基数',
    NON_UNIQUE AS '是否唯一'
FROM sys.schema_index_statistics
ORDER BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME;

总结 

到此这篇关于MySQL数据库自带系统数据库功能超详细介绍的文章就介绍到这了,更多相关MySQL自带系统数据库功能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文