MySQL數(shù)據(jù)庫自帶系統(tǒng)數(shù)據(jù)庫功能超詳細介紹
前言
MySQL自帶的系統(tǒng)數(shù)據(jù)庫是數(shù)據(jù)庫管理的核心組成部分,主要包含mysql、information_schema、performance_schema、sys,它們不用于存儲業(yè)務(wù)數(shù)據(jù),而是用于存儲系統(tǒng)元數(shù)據(jù)、權(quán)限信息和性能監(jiān)控數(shù)據(jù)。這些系統(tǒng)數(shù)據(jù)庫是MySQL正常運行和高效管理的關(guān)鍵。
一、mysql
mysql是 MySQL 的核心系統(tǒng)數(shù)據(jù)庫,它是 MySQL 服務(wù)器運行的"大腦"。這個數(shù)據(jù)庫存儲了所有與用戶權(quán)限、系統(tǒng)配置和元數(shù)據(jù)相關(guān)的信息,是 MySQL 正常運行的關(guān)鍵。
1. 核心特性
- 用戶權(quán)限管理:存儲所有用戶賬戶信息、權(quán)限分配及角色定義,是數(shù)據(jù)庫安全控制的核心。
- 系統(tǒng)配置存儲:保存數(shù)據(jù)庫的全局配置參數(shù),如服務(wù)器變量、存儲引擎設(shè)置等。
- 元數(shù)據(jù)維護:記錄數(shù)據(jù)庫對象(如表、視圖、存儲過程等)的創(chuàng)建信息及關(guān)聯(lián)關(guān)系。
2. 核心表
| 表分類 | 表名 | 用途 | 說明 |
|---|---|---|---|
| 用戶權(quán)限管理 | user | 存儲全局用戶賬戶及權(quán)限信息 | 包含用戶名、主機名、加密密碼、全局權(quán)限(如SELECT_priv、INSERT_priv)等字段,是數(shù)據(jù)庫安全控制的核心 |
| 數(shù)據(jù)庫級權(quán)限 | db | 管理數(shù)據(jù)庫級別的訪問權(quán)限 | 指定用戶對特定數(shù)據(jù)庫的操作權(quán)限(如CREATE、DROP),權(quán)限粒度細化到數(shù)據(jù)庫級別 |
| 表級權(quán)限 | tables_priv | 控制表級別的操作權(quán)限 | 記錄用戶對具體表的權(quán)限(如UPDATE、DELETE),支持更細粒度的權(quán)限管理 |
| 列級權(quán)限 | columns_priv | 實現(xiàn)列級別的訪問控制 | 定義用戶對表中特定列的權(quán)限(如僅允許修改某列數(shù)據(jù)),實現(xiàn)精細化權(quán)限管理 |
| 程序?qū)ο髾?quán)限 | procs_priv | 管理存儲過程/函數(shù)權(quán)限 | 存儲用戶對存儲過程和函數(shù)的執(zhí)行權(quán)限,控制程序?qū)ο蟮脑L問 |
| 代理權(quán)限 | proxies_priv | 管理代理用戶權(quán)限 | 允許一個用戶以另一個用戶身份執(zhí)行操作,支持權(quán)限代理機制 |
| 服務(wù)器配置 | servers | 存儲服務(wù)器配置信息 | 記錄MySQL服務(wù)器實例的配置參數(shù),如服務(wù)器地址、端口等 |
| 事件調(diào)度器 | event | 管理事件調(diào)度器信息 | 包含事件名稱、執(zhí)行時間表達式、狀態(tài)(ENABLED/DISABLED)等,用于定時任務(wù)管理 |
| 時區(qū)信息 | time_zone | 存儲時區(qū)配置 | 包含時區(qū)名稱、時區(qū)偏移量、是否啟用等信息,支持多時區(qū)應(yīng)用 |
| 時區(qū)轉(zhuǎn)換 | time_zone_leap_second | 記錄閏秒信息 | 存儲閏秒發(fā)生時間及調(diào)整值,確保時間計算的準確性 |
| 時區(qū)名稱映射 | time_zone_name | 時區(qū)名稱與ID映射 | 關(guān)聯(lián)時區(qū)名稱與內(nèi)部標識符,方便時區(qū)查詢 |
| 時區(qū)偏移 | time_zone_transition | 時區(qū)轉(zhuǎn)換歷史 | 記錄時區(qū)偏移量的歷史變化,支持時間相關(guān)計算 |
| 插件管理 | plugin | 存儲已安裝插件信息 | 包含插件名稱、狀態(tài)(ACTIVE/INACTIVE)、版本、描述等,支持插件擴展 |
| 服務(wù)器變量 | global_variables | 存儲全局服務(wù)器變量 | 包含變量名(如max_connections)、當前值、默認值等,影響服務(wù)器行為 |
| 會話變量 | session_variables | 存儲會話級變量 | 與全局變量類似,但僅影響當前會話,支持個性化配置 |
| 幫助信息 | help_topic | 存儲幫助主題信息 | 包含幫助主題ID、名稱、描述等,支持內(nèi)置幫助系統(tǒng) |
| 幫助內(nèi)容 | help_relation | 關(guān)聯(lián)幫助主題與內(nèi)容 | 映射幫助主題與詳細內(nèi)容的關(guān)聯(lián)關(guān)系,構(gòu)建幫助系統(tǒng)框架 |
| 幫助類別 | help_category | 管理幫助分類 | 定義幫助信息的分類體系,方便用戶按類別查詢幫助 |
| 慢查詢?nèi)罩?/td> | slow_log | 記錄慢查詢信息 | 存儲執(zhí)行時間超過閾值的SQL語句,用于性能分析(需啟用慢查詢?nèi)罩竟δ埽?/td> |
3. 權(quán)限管理說明
3.1. 權(quán)限層次結(jié)構(gòu)
MySQL 的權(quán)限是分層管理的,從高到低依次為:
- 全局權(quán)限(
user表):影響整個服務(wù)器。 - 數(shù)據(jù)庫級別權(quán)限(
db表):影響特定數(shù)據(jù)庫。 - 表級別權(quán)限(
tables_priv表):影響特定表。 - 列級別權(quán)限(
columns_priv表):影響特定列。
3.2. 權(quán)限類型
| 權(quán)限類型 | 說明 | 作用范圍 |
|---|---|---|
SELECT | 查詢數(shù)據(jù) | 全局、數(shù)據(jù)庫、表、列 |
INSERT | 插入數(shù)據(jù) | 全局、數(shù)據(jù)庫、表、列 |
UPDATE | 更新數(shù)據(jù) | 全局、數(shù)據(jù)庫、表、列 |
DELETE | 刪除數(shù)據(jù) | 全局、數(shù)據(jù)庫、表、列 |
CREATE | 創(chuàng)建數(shù)據(jù)庫/表 | 全局、數(shù)據(jù)庫 |
DROP | 刪除數(shù)據(jù)庫/表 | 全局、數(shù)據(jù)庫 |
GRANT OPTION | 授予權(quán)限 | 全局、數(shù)據(jù)庫 |
CREATE TEMPORARY TABLES | 創(chuàng)建臨時表 | 全局、數(shù)據(jù)庫 |
LOCK TABLES | 鎖定表 | 全局、數(shù)據(jù)庫 |
CREATE VIEW | 創(chuàng)建視圖 | 全局、數(shù)據(jù)庫 |
SHOW VIEW | 查看視圖 | 全局、數(shù)據(jù)庫 |
EXECUTE | 執(zhí)行存儲過程 | 全局、數(shù)據(jù)庫、表 |
4. 常用操作
4.1. 查看所有用戶
SELECT User, Host FROM mysql.user;
4.2. 授予權(quán)限
-- 授予用戶對test數(shù)據(jù)庫的SELECT權(quán)限 GRANT SELECT ON test.* TO 'user'@'localhost'; -- 授予用戶對所有數(shù)據(jù)庫的SELECT權(quán)限 GRANT SELECT ON *.* TO 'user'@'localhost'; -- 授予用戶對特定表的權(quán)限 GRANT SELECT, INSERT ON test.users TO 'user'@'localhost'; -- 授予用戶對特定列的權(quán)限 GRANT SELECT (name, email) ON test.users TO 'user'@'localhost';
4.3. 查看特定用戶的權(quán)限
-- 查看用戶權(quán)限 SHOW GRANTS FOR 'user'@'localhost'; -- 查看用戶權(quán)限的詳細信息 SELECT * FROM mysql.user WHERE User = 'user' AND Host = 'localhost';
4.4. 修改權(quán)限
-- 修改用戶密碼
ALTER USER 'user'@'localhost' IDENTIFIED BY 'new_password';
-- 重置密碼
SET PASSWORD FOR 'user'@'localhost' = PASSWORD('new_password');
-- 刷新權(quán)限
FLUSH PRIVILEGES;
4.5. 刪除用戶權(quán)限
-- 刪除用戶權(quán)限 REVOKE SELECT ON test.* FROM 'user'@'localhost'; -- 刪除用戶 DROP USER 'user'@'localhost';
5. 常見問題
5.1. 無法登錄
- 檢查
user表中的用戶和密碼 - 確認
Host字段是否匹配連接IP - 使用
FLUSH PRIVILEGES刷新權(quán)限
5.2. 權(quán)限不生效
- 確認是否執(zhí)行了
FLUSH PRIVILEGES - 檢查權(quán)限是否在正確的表中(如
db表 vsuser表)
5.3. 密碼重置
-- 停止MySQL服務(wù)
sudo systemctl stop mysql
-- 以跳過權(quán)限檢查的方式啟動
sudo mysqld_safe --skip-grant-tables &
-- 登錄MySQL
mysql -u root
-- 重置密碼
USE mysql;
UPDATE user SET authentication_string = PASSWORD('new_password') WHERE User = 'root';
-- 重啟MySQL服務(wù)
sudo systemctl restart mysql
二、information_schema
information_schema是 MySQL 的核心系統(tǒng)數(shù)據(jù)庫,它提供了一個虛擬數(shù)據(jù)庫,其中包含所有數(shù)據(jù)庫的元數(shù)據(jù)信息。這個數(shù)據(jù)庫不存儲實際業(yè)務(wù)數(shù)據(jù),而是提供關(guān)于數(shù)據(jù)庫結(jié)構(gòu)、表、列、索引、視圖等的描述性信息。
1. 核心特性
- 標準系統(tǒng)數(shù)據(jù)庫:所有 MySQL 版本都支持。
- 只讀視圖:不能直接修改數(shù)據(jù),只能查詢。
- 動態(tài)生成的虛擬數(shù)據(jù)庫:數(shù)據(jù)不存儲在磁盤上,而是內(nèi)部動態(tài)生成。
- 元數(shù)據(jù)查詢中心:數(shù)據(jù)庫管理員和開發(fā)人員的"數(shù)據(jù)庫百科全書"。
- 標準 SQL 兼容:使用標準 SQL 查詢獲取元數(shù)據(jù)。
2. 核心視圖
| 視圖分類 | 視圖名稱 | 用途 | 說明 |
|---|---|---|---|
| 數(shù)據(jù)庫元數(shù)據(jù) | SCHEMATA | 查看數(shù)據(jù)庫列表及屬性 | 包含所有數(shù)據(jù)庫名稱、默認字符集、排序規(guī)則等信息 |
| 表元數(shù)據(jù) | TABLES | 查看表及視圖基本信息 | 包含表所屬數(shù)據(jù)庫、表名、存儲引擎、創(chuàng)建時間、更新時間等 |
| 列元數(shù)據(jù) | COLUMNS | 查看表列詳細信息 | 包含列所屬表、列名、數(shù)據(jù)類型、是否允許NULL、默認值、字符最大長度等 |
| 索引元數(shù)據(jù) | STATISTICS | 查看表索引信息 | 包含索引所屬表、索引名、列名、索引順序、索引類型(如BTREE)等 |
| 權(quán)限管理 | USER_PRIVILEGES | 查看用戶全局權(quán)限 | 包含用戶賬號、權(quán)限類型(如SELECT)、是否可授權(quán)等 |
| 存儲過程/函數(shù) | ROUTINES | 查看存儲過程和函數(shù) | 包含名稱、類型(PROCEDURE/FUNCTION)、所屬數(shù)據(jù)庫、創(chuàng)建時間等 |
| 觸發(fā)器 | TRIGGERS | 查看觸發(fā)器信息 | 包含觸發(fā)器所屬表、事件類型(INSERT/UPDATE/DELETE)、觸發(fā)時機(BEFORE/AFTER)等 |
| 事件調(diào)度器 | EVENTS | 查看事件調(diào)度器信息 | 包含事件名稱、所屬數(shù)據(jù)庫、執(zhí)行時間表達式、狀態(tài)(ENABLED/DISABLED)等 |
| 字符集與排序 | CHARACTER_SETS | 查看支持的字符集 | 包含字符集名稱、默認排序規(guī)則、描述等 |
| 排序規(guī)則 | COLLATIONS | 查看排序規(guī)則信息 | 包含排序規(guī)則名稱、字符集、是否區(qū)分大小寫、是否區(qū)分重音等 |
| 表約束 | KEY_COLUMN_USAGE | 查看表約束關(guān)系 | 包含約束類型(PRIMARY KEY/FOREIGN KEY)、關(guān)聯(lián)表、關(guān)聯(lián)列等 |
| 分區(qū)表 | PARTITIONS | 查看分區(qū)表信息 | 包含表名、分區(qū)名、分區(qū)方法(RANGE/HASH)、分區(qū)表達式等 |
| 插件管理 | PLUGINS | 查看已安裝插件 | 包含插件名稱、狀態(tài)(ACTIVE/INACTIVE)、版本、描述等 |
| 服務(wù)器參數(shù) | GLOBAL_VARIABLES | 查看全局服務(wù)器變量 | 包含變量名(如max_connections)、當前值、默認值等 |
| 會話參數(shù) | SESSION_VARIABLES | 查看會話級變量 | 與GLOBAL_VARIABLES類似,但針對當前會話 |
| 引擎信息 | ENGINES | 查看存儲引擎支持情況 | 包含引擎名稱(如InnoDB)、支持狀態(tài)(DEFAULT/YES/NO)、描述等 |
| 表空間 | TABLESPACES | 查看表空間信息 | 包含表空間名稱、引擎、文件路徑、空間大小等 |
| 鎖信息 | TABLE_CONSTRAINTS | 查看表約束類型 | 包含表名、約束類型(PRIMARY KEY/UNIQUE/FOREIGN KEY)等 |
| 外鍵關(guān)系 | REFERENTIAL_CONSTRAINTS | 查看外鍵關(guān)聯(lián)關(guān)系 | 包含父表、子表、關(guān)聯(lián)列、更新/刪除規(guī)則等 |
| 視圖定義 | VIEWS | 查看視圖定義詳情 | 包含視圖所屬數(shù)據(jù)庫、視圖名、定義SQL語句、是否可更新等 |
3. 常用操作
3.1. 查詢所有數(shù)據(jù)庫
SELECT SCHEMA_NAME AS `Database` FROM information_schema.SCHEMATA;
3.2. 查詢特定數(shù)據(jù)庫的所有表
SELECT TABLE_NAME AS `Table` FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name';
3.3. 查詢表結(jié)構(gòu)
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. 查詢外鍵關(guān)系
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. 數(shù)據(jù)庫結(jié)構(gòu)比較
-- 比較兩個數(shù)據(jù)庫的表結(jié)構(gòu)差異
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 版本引入的核心性能監(jiān)控工具,用于收集 MySQL 服務(wù)器運行時的底層事件信息。它也是一個虛擬數(shù)據(jù)庫,數(shù)據(jù)存儲在內(nèi)存中,重啟后會丟失。它和慢查詢?nèi)罩静煌?,它提供的?strong>實時、細粒度的性能數(shù)據(jù),而不是事后分析的慢查詢記錄。
1. 核心特性
- 低開銷設(shè)計:采用輕量級檢測點機制,默認配置下對性能影響小于5%,但啟用大量監(jiān)控項時可能增加開銷。
- 內(nèi)存存儲:所有數(shù)據(jù)保存在內(nèi)存中,重啟后數(shù)據(jù)丟失,不占用磁盤空間。
- 事件驅(qū)動:以“事件”為單位記錄資源消耗(如時間、次數(shù)),涵蓋線程、語句、鎖、I/O等關(guān)鍵指標。
- 細粒度監(jiān)控:比慢查詢?nèi)罩咎峁└敿毜男阅軘?shù)據(jù)。
- 實時性:可以實時監(jiān)控數(shù)據(jù)庫運行狀態(tài)。
- 可配置性:按需選擇監(jiān)控哪些事件。
- 標準化SQL:數(shù)據(jù)存儲在標準 MySQL 表中,便于使用 SQL 分析。
2. 核心運行機制
事件分類與采集
performance_schema通過“檢測點”捕獲服務(wù)器內(nèi)部事件,事件類型包括:- 語句事件:SQL語句的執(zhí)行(如解析、排序、執(zhí)行)。
- 等待事件:資源等待(如鎖、I/O、線程同步)。
- 階段事件:SQL執(zhí)行各階段(如解析、優(yōu)化、執(zhí)行)。
- 事務(wù)事件:事務(wù)的啟動、提交、回滾。
- 內(nèi)存事件:內(nèi)存分配與釋放。
存儲引擎與表結(jié)構(gòu)
performance_schema使用專用存儲引擎,表結(jié)構(gòu)按功能分類:- 當前事件表(如
events_statements_current):記錄當前活躍事件。 - 歷史事件表(如
events_statements_history):記錄最近完成的事件(線程級)。 - 長歷史事件表(如
events_statements_history_long):記錄全局歷史事件。 - 摘要表(如
events_statements_summary_by_digest):按語句摘要聚合統(tǒng)計數(shù)據(jù)。 - 配置表(如
setup_instruments、setup_consumers):動態(tài)控制監(jiān)控項與數(shù)據(jù)存儲。
- 當前事件表(如
數(shù)據(jù)采集與存儲
- 事件數(shù)據(jù)通過檢測點實時采集,存儲在內(nèi)存表中,支持
SELECT查詢。 - 配置表(如
setup_instruments)可啟用/禁用特定事件采集,減少開銷。
- 事件數(shù)據(jù)通過檢測點實時采集,存儲在內(nèi)存表中,支持
3. 核心表
| 表分類 | 表名 | 用途 | 說明 |
|---|---|---|---|
| 語句事件記錄 | events_statements_current | 記錄當前執(zhí)行的SQL詳細信息 | 如執(zhí)行時間、掃描行數(shù)、鎖等待等 |
| 語句事件記錄 | events_statements_history | 記錄最近完成的SQL歷史 | 按線程分組,存儲最近10條執(zhí)行記錄 |
| 語句事件記錄 | events_statements_history_long | 全局SQL歷史記錄 | 存儲所有線程的SQL執(zhí)行情況,最多10000條 |
| 語句事件記錄 | events_statements_summary_by_digest | SQL摘要聚合統(tǒng)計 | 按SQL指紋分組,統(tǒng)計執(zhí)行次數(shù)、總耗時、平均耗時等 |
| 等待事件記錄 | events_waits_current | 當前資源等待事件 | 如鎖等待、I/O等待、線程同步等 |
| 等待事件記錄 | events_waits_history | 最近完成的等待事件 | 按線程分組,存儲最近10條等待記錄 |
| 等待事件記錄 | events_waits_history_long | 全局等待事件歷史 | 存儲所有線程的等待事件,最多10000條 |
| 等待事件記錄 | events_waits_summary_by_event_name | 按事件名稱聚合統(tǒng)計 | 如鎖等待次數(shù)、總耗時、平均耗時等 |
| 階段事件記錄 | events_stages_current | 當前SQL執(zhí)行階段 | 如解析、優(yōu)化、執(zhí)行等階段 |
| 階段事件記錄 | events_stages_history | 歷史階段事件 | 按線程分組,存儲最近10條階段記錄 |
| 階段事件記錄 | events_stages_history_long | 全局階段事件歷史 | 存儲所有線程的階段事件,最多10000條 |
| 階段事件記錄 | events_stages_summary_by_event_name | 按階段名稱聚合統(tǒng)計 | 如解析階段耗時、執(zhí)行階段耗時等 |
| 事務(wù)事件記錄 | events_transactions_current | 當前執(zhí)行的事務(wù)信息 | 如事務(wù)ID、狀態(tài)、開始時間等 |
| 事務(wù)事件記錄 | events_transactions_history | 最近完成的事務(wù)歷史 | 按線程分組,存儲最近10條事務(wù)記錄 |
| 事務(wù)事件記錄 | events_transactions_history_long | 全局事務(wù)歷史 | 存儲所有線程的事務(wù)記錄,最多10000條 |
| 事務(wù)事件記錄 | events_transactions_summary_by_transaction | 事務(wù)級別統(tǒng)計 | 如提交次數(shù)、回滾次數(shù)、事務(wù)耗時等 |
| 內(nèi)存事件記錄 | memory_summary_by_account_by_event_name | 按賬戶和事件統(tǒng)計內(nèi)存 | 如分配次數(shù)、釋放次數(shù)、內(nèi)存使用量等 |
| 內(nèi)存事件記錄 | memory_summary_by_host_by_event_name | 按主機和事件統(tǒng)計內(nèi)存 | 如內(nèi)存分配、釋放、使用量等 |
| 內(nèi)存事件記錄 | memory_summary_by_thread_by_event_name | 按線程和事件統(tǒng)計內(nèi)存 | 如線程內(nèi)存使用情況、內(nèi)存泄漏檢測等 |
| 內(nèi)存事件記錄 | memory_summary_global_by_event_name | 全局內(nèi)存使用統(tǒng)計 | 如總分配量、總釋放量、當前使用量等 |
| 文件I/O事件 | file_summary_by_event_name | 按事件統(tǒng)計文件I/O | 如讀寫次數(shù)、耗時、數(shù)據(jù)量等 |
| 文件I/O事件 | file_summary_by_instance | 按文件實例統(tǒng)計I/O | 如文件讀寫次數(shù)、耗時、數(shù)據(jù)量等 |
| 文件I/O事件 | table_io_waits_summary_by_table | 按表統(tǒng)計I/O等待 | 如表讀寫等待次數(shù)、耗時等 |
| 配置表 | setup_instruments | 配置事件采集項 | 啟用/禁用特定事件監(jiān)控,如鎖、I/O、SQL執(zhí)行等 |
| 配置表 | setup_consumers | 配置數(shù)據(jù)存儲目標 | 控制是否記錄歷史、摘要或全局數(shù)據(jù) |
| 配置表 | setup_timers | 配置計時器類型 | 如CPU時間、線程時間、墻鐘時間等 |
| 配置表 | setup_actors | 配置用戶/主機監(jiān)控 | 設(shè)置用戶和主機的監(jiān)控權(quán)限 |
| 其他表 | threads | 服務(wù)器線程信息 | 如線程ID、類型、狀態(tài)、CPU使用率等 |
| 其他表 | users | 用戶信息 | 如用戶名、主機、權(quán)限等 |
| 其他表 | variables_by_thread | 線程變量使用 | 如線程級變量值、默認值、是否修改等 |
| 其他表 | mutex_instances | 互斥同步對象實例 | 記錄系統(tǒng)中使用互斥量對象的所有記錄,name為wait/synch/mutex/* |
| 其他表 | rwlock_instances | 讀寫鎖同步對象實例 | 記錄系統(tǒng)中使用讀寫鎖對象的所有記錄,name為wait/synch/rwlock/* |
| 其他表 | socket_instances | 活躍會話對象實例 | 記錄thread_id, socket_id, ip和port,用于關(guān)聯(lián)應(yīng)用與數(shù)據(jù)庫 |
4. 常用操作
4.1. 檢查是否已啟用
SHOW VARIABLES LIKE 'performance_schema'; -- 默認值為 ON(MySQL 5.7+)
4.2. 開啟特定監(jiān)控項
-- 開啟所有事件的監(jiān)控(謹慎使用,可能影響性能) UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'; -- 按需開啟特定監(jiān)控(推薦) UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_statements%'; -- 開啟SQL語句監(jiān)控
4.3. 配置監(jiān)控粒度
-- 監(jiān)控所有用戶的SQL語句 UPDATE performance_schema.setup_actors SET ENABLED = 'YES', HISTORY = 'YES' WHERE USER = '%';
4.4. 查看最耗時的SQL語句
SELECT
DIGEST_TEXT AS 'SQL語句',
COUNT_STAR AS '執(zhí)行次數(shù)',
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. 查看最近執(zhí)行的SQL詳情
SELECT
EVENT_ID,
SQL_TEXT AS 'SQL語句',
TIMER_WAIT / 1e9 AS '耗時(秒)',
LOCK_TIME / 1e9 AS '鎖等待時間(秒)',
ROWS_EXAMINED AS '掃描行數(shù)',
ROWS_SENT AS '返回行數(shù)'
FROM performance_schema.events_statements_history
ORDER BY TIMER_WAIT DESC
LIMIT 10;
4.6. 分析I/O瓶頸
SELECT
EVENT_NAME AS '事件類型',
COUNT_STAR AS '次數(shù)',
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. 監(jiān)控長期運行事務(wù)
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+ 引入的一個輔助庫,旨在簡化數(shù)據(jù)庫管理員(DBA)和開發(fā)者的性能監(jiān)控與診斷工作。它基于performance_schema和information_schema,通過視圖、存儲過程和函數(shù)的形式,提供更直觀、易用的數(shù)據(jù)庫性能和元數(shù)據(jù)信息。
sys 是 MySQL 的"性能分析助手",它將復(fù)雜的性能數(shù)據(jù)轉(zhuǎn)換為易于理解的視圖,讓數(shù)據(jù)庫管理員和開發(fā)人員能夠快速識別和解決性能問題。
1. 核心特性
簡化性能監(jiān)控
- sys庫封裝了performance_schema的復(fù)雜表結(jié)構(gòu),提供預(yù)聚合的視圖,直接展示關(guān)鍵性能指標(如查詢執(zhí)行時間、鎖等待、IO延遲等)。
- 例如,通過
host_summary視圖可快速查看各主機的連接數(shù)、內(nèi)存使用、IO延遲等概覽信息。
快速診斷問題
- 提供針對慢查詢、熱點表、鎖等待等常見問題的專用視圖,幫助定位性能瓶頸。
- 例如,
statements_with_runtimes_in_95th_percentile視圖可識別執(zhí)行時間最長的查詢。
統(tǒng)一元數(shù)據(jù)查詢
- 集成information_schema的信息,提供關(guān)于數(shù)據(jù)庫對象(如表、索引、存儲過程)的詳細元數(shù)據(jù)視圖。
2. 主要內(nèi)容
2.1. 視圖(Views)
sys庫包含大量視圖,按功能可分為以下幾類:
性能視圖
statement_analysis:查詢執(zhí)行統(tǒng)計(次數(shù)、總延遲、平均延遲等)。innodb_lock_waits:顯示鎖等待鏈,幫助解決死鎖問題。io_by_thread_by_latency:按線程統(tǒng)計IO延遲,識別高負載線程。
元數(shù)據(jù)視圖
schema_table_statistics:統(tǒng)計表的增刪改查操作量及IO耗時。schema_unused_indexes:識別未使用的冗余索引,優(yōu)化表結(jié)構(gòu)。
系統(tǒng)狀態(tài)視圖
host_summary:主機級性能概覽(連接數(shù)、內(nèi)存使用、IO等)。memory_by_thread_by_current_bytes:按線程統(tǒng)計內(nèi)存使用情況。
視圖命名規(guī)則:大部分視圖成對出現(xiàn),帶x$前綴的視圖顯示原始數(shù)據(jù)(如皮秒單位),不帶前綴的視圖顯示經(jīng)過單位換算的數(shù)據(jù)(如毫秒、秒)。 比如:host_summary_by_file_io(換算后)與x$host_summary_by_file_io(原始數(shù)據(jù))。
2.2. 存儲過程(Procedures)
用于動態(tài)配置performance_schema的監(jiān)控項,例如:
ps_setup_enable_instrument('wait'):啟用等待事件監(jiān)控。ps_setup_disable_consumer('history_long'):禁用歷史長事件收集。ps_setup_reset_to_default(TRUE):重置performance_schema為默認配置。
2.3. 函數(shù)(Functions)
提供格式化輸出功能,例如:
format_bytes(bytes):將字節(jié)數(shù)轉(zhuǎn)換為易讀的單位(如KB、MB)。format_time(microseconds):將微秒轉(zhuǎn)換為時間字符串(如00:00:01.234)。
3. 常用操作
3.1. 排查慢查詢
-- 查看執(zhí)行時間最長的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. 監(jiān)控IO性能
-- 按主機統(tǒng)計文件IO延遲 SELECT * FROM sys.host_summary_by_file_io ORDER BY io_latency DESC;
3.5. 查看使用臨時表的查詢
SELECT
DIGEST_TEXT AS 'SQL語句',
COUNT_STAR AS '執(zhí)行次數(shù)',
SUM_CREATED_TMP_DISK_TABLES AS '磁盤臨時表次數(shù)',
SUM_CREATED_TMP_TABLES AS '臨時表總數(shù)'
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. 查看內(nèi)存使用情況
SELECT
EVENT_NAME AS '內(nèi)存事件',
COUNT_STAR AS '次數(shù)',
SUM_NUMBER_OF_BYTES_USED / 1024 / 1024 AS '總內(nèi)存(MB)'
FROM sys.memory_global_by_current_bytes
ORDER BY SUM_NUMBER_OF_BYTES_USED DESC
LIMIT 10;
3.8. 查看索引使用情況
SELECT
TABLE_SCHEMA AS '數(shù)據(jù)庫',
TABLE_NAME AS '表名',
INDEX_NAME AS '索引名',
SEQ_IN_INDEX AS '索引順序',
COLUMN_NAME AS '列名',
CARDINALITY AS '基數(shù)',
NON_UNIQUE AS '是否唯一'
FROM sys.schema_index_statistics
ORDER BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME;
總結(jié)
到此這篇關(guān)于MySQL數(shù)據(jù)庫自帶系統(tǒng)數(shù)據(jù)庫功能超詳細介紹的文章就介紹到這了,更多相關(guān)MySQL自帶系統(tǒng)數(shù)據(jù)庫功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
網(wǎng)上提供的最簡便的MySql數(shù)據(jù)庫備份的方法
網(wǎng)上提供的最簡便的MySql數(shù)據(jù)庫備份的方法...2007-02-02
解決MySQL安裝第四步報錯問題(initializing database(may take&nb
安裝MySQL時遇到中文計算機名導(dǎo)致的亂碼問題,解決方法是修改my.ini配置文件中的相關(guān)設(shè)置,如果問題仍然存在,需要徹底卸載并刪除所有相關(guān)文件,然后將計算機名改為英文,重新安裝MySQL2025-12-12
Navicat自動備份MySQL數(shù)據(jù)的流程步驟
對于從事IT開發(fā)的工程師,數(shù)據(jù)備份我想大家并不陌生,這件工程太重要了!對于比較重要的數(shù)據(jù),我們希望能定期備份,每天備份1次或多次,或者是每周備份1次或多次,所以本文給大家介紹了Navicat自動備份MySQL數(shù)據(jù)的流程步驟,需要的朋友可以參考下2024-12-12
MySQL 數(shù)據(jù)庫空間使用大小查詢的方法實現(xiàn)
本文主要介紹了MySQL 數(shù)據(jù)庫空間使用大小查詢的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-07-07
一文解決連接MySQL報錯is?not?allowed?to?connect?to?this?MySQL?
這篇文章主要給大家介紹了關(guān)于如何通過一文解決連接MySQL報錯is?not?allowed?to?connect?to?this?MySQL?server的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-08-08

