
在Linux操作系统中,MySQL不仅是开发者们首选的数据库解决方案之一,更是许多系统自带的数据库软件
在MySQL初始化完成后,会自动创建几个关键的默认数据库,这些数据库在MySQL的运行和管理中扮演着举足轻重的角色
本文将深入探讨Linux下MySQL的默认库,帮助读者更好地理解其结构和功能
一、MySQL默认数据库概述 在MySQL初始化完成后,会自动创建以下四个系统数据库:`information_schema`、`performance_schema`、`mysql`和`sys`
这些系统数据库主要记录了MySQL服务自身的信息,如用户信息、权限设置、库表信息以及服务器性能参数等,对数据库管理员(DBA)的工作具有极大的帮助
1.information_schema `information_schema`是MySQL中的一个只读数据库,提供了访问数据库元数据的各种表和视图
这些元数据包括数据库、表、列、索引、视图、存储过程、函数以及触发器等对象的详细信息
通过查询`information_schema`中的表,用户可以获取关于数据库结构的全面信息,这对于数据库的设计、优化和管理至关重要
例如,通过查询`information_schema.tables`表,可以获取MySQL实例下所有数据库中的表名、表引擎、表大小以及表行数等有用信息
这对于进行数据库资产统计、性能调优以及故障排除等工作具有极大的帮助
2.performance_schema `performance_schema`为MySQL服务器运行时状态提供了一个底层监控功能,主要用于收集数据库服务器的性能参数
通过`performance_schema`,用户可以监控和分析MySQL服务器的各种性能指标,如CPU使用率、内存占用、锁等待情况、查询执行时间等
这些信息对于诊断性能瓶颈、优化查询以及提高数据库整体性能至关重要
然而,由于`performance_schema`中的信息较为复杂,官方特意对其进行了简化,并最终形成了一个名为`sys`的数据库
3.mysql `mysql`是MySQL服务的核心数据库,主要存储了数据库用户、权限、事件调度以及插件等信息
此外,如果将慢日志或通用日志调整成表形式存储,也会存储在这个数据库中
`mysql`数据库中的关键表包括: -`user`表:记录了每个用户的全局权限信息
-`db`表:记录了库级别的权限信息
-`tables_priv`、`columns_priv`等表:分别记录了表级和列级的权限信息
-`event`表:用于存储事件与任务调度信息
-`gtid`表:与GTID(全局事务标识符)主从复制有关的表
-`innodb_index_stats`和`innodb_table_stats`表:分别存储了InnoDB索引和表的统计信息,这些信息对于优化查询性能非常重要
-`plugin`表:记录了MySQL服务器所使用的插件信息
通过管理`mysql`数据库中的这些表,DBA可以灵活地配置和管理MySQL服务器的用户权限、事件调度以及插件等功能,从而确保数据库的安全性和高效运行
4.sys `sys`数据库中的所有数据都来自`performance_schema`,但提供了更为简化和直观的视图,以便DBA和开发人员更快地了解数据库的运行情况
`sys`数据库被称为MySQL的数据字典,存放了所有的元数据信息,如数据库、表、索引以及会话信息等
通过`sys`数据库,用户可以进行一些数据资产统计,如统计数据库中的库数量、表数量以及占用硬盘空间等
`sys`数据库中的关键表包括: -`TABLES`表:保存了所有表的数据字典信息,如表名、表引擎、表大小以及表行数等
-`PROCESSLIST`表:记录了会话的详细信息,执行`SHOW PROCESSLIST`命令实际上就是在查询该表
-`INNODB_TRX`表:记录了所有事务的信息,包括事务是否被锁
-`INNODB_LOCK_WAITS`表:记录了事务正在等待的锁的信息
通过查询`sys`数据库中的这些表,用户可以快速了解数据库的运行状态,进行性能调优和故障排除等工作
二、MySQL默认库的实际运用案例 了解了MySQL默认库的结构和功能后,我们可以通过一些实际运用案例来进一步加深对其的理解
1.统计MySQL实例下每个库中所有表的表名以及个数 SELECT table_schema, COUNT(table_name), GROUP_CONCAT(table_name) FROM `information_schema.tables` GROUP BYtable_schema; 这条SQL语句通过查询`information_schema.tables`表,可以统计出MySQL实例下每个数据库中的表名以及个数,并以逗号分隔的形式列出所有表名
这对于了解数据库结构以及进行资产统计非常有用
2.统计MySQL实例下每个库占用空间总大小,并以MB为单位显示 SELECT table_schema, SUM(AVG_ROW_LENGTHTABLE_ROWS+INDEX_LENGTH)/1024/1024 FROM `information_schema.TABLES` GROUP BYtable_schema; 这条SQL语句通过计算`information_schema.TABLES`表中的`AVG_ROW_LENGTH`、`TABLE_ROWS`以及`INDEX_LENGTH`等字段的值,可以统计出MySQL实例下每个数据库占用的空间总大小,并以MB为单位显示
这对于进行数据库容量规划和优化存储非常有用
3.查找出MySQL实例下非InnoDB的表 SELECT table_schema, table_name FROM information_schema.tables WHERE ENGINE!= InnoDB AND table_schema NOT IN(sys, performance_schema, information_schema, mysql); 这条SQL语句通过查询`information_schema.tables`表,并过滤出非InnoDB引擎的表,可以找出MySQL实例下所有非InnoDB的表
这对于了解数据库表引擎的使用情况以及进行引擎迁移等工作非常有用
4.统计出MySQL实例下所有用户 SELECT CONCAT(USER, @, HOST) FROM mysql.user; 这条SQL语句通过查询`mysql.user`表,可以统计出MySQL实例下所有用户的信息,包括用户名和主机名
这对于进行用户管理和权限配置非常有用
5.查询当前MySQL中会话信息 相比使用`SHOW PROCESSLIST`命令直接查看会话信息,使用SQL语句查询`information_schema.processlist`表可以更加灵活地进行过滤和排序
例如: SELECT FROM information_schema.processlist WHERE time > 50; 这条SQL语句可以查询出运行时间超过50秒的会话信息,有助于进行性能调优和故障排除等工作
6.批量杀死某个用户的进程 通过查询`information_schema.processlist`表,并生成相应的`KILL`语句,可以批量杀死某个用户的进程
例如: SELECT CONCAT(KILL , id, ;) FROM information_schema.processlist WHERE user = your_user_name; 这条SQL语句会生成一系列`KILL`语句,用于杀死指定用户的所有进程
这对于进行用户管理和故障排除等工作非常有用
但需要注意的是,在执行这些`KILL`语句之前,一定要确保不会对业务造成影响
7.查看当前正在运行的SQL SELECT conn_id, USER, current_statement, last_statement FROM sys.session; 这条SQL语句通过查询`sys.session`表,可以查看当前正在运行的SQL语句以及上一条执行的SQL语句
这对于进行性能调优和故障排除等工作非常有用
8.统计有全表扫描的SQL SELECT FROM sys.statements_with_full_table_scans LIMIT 10; 这条SQL语句通过查询`sy
MySQL中INT类型索引对查询性能的影响及总数优化策略
Linux MySQL默认库详解指南
MySQL:拒绝空字符串,数据完整性守护
iutus备份文件夹:数据守护秘籍
RDS MySQL高效配置指南
MySQL班级数据类型的最佳选择
MySQL与MongoDB数据同步:高效整合策略解析
MySQL中INT类型索引对查询性能的影响及总数优化策略
MySQL:拒绝空字符串,数据完整性守护
RDS MySQL高效配置指南
MySQL班级数据类型的最佳选择
MySQL与MongoDB数据同步:高效整合策略解析
MySQL5.7.19版本MIS安装包下载指南
MySQL5.5官网64位版高速下载指南
通过SSH连接MySQL命令行指南
MySQL实战技巧:如何高效筛选字段重复数据
MySQL特殊字符转义技巧揭秘
MySQL设置DateTime全攻略
MySQL启动报错?快速排查指南