前几篇多多少少学习了一些MySQL相关的知识,例如安装、配置、字符集等,本篇想要介绍下安装好的MySQL有哪些数据库。了解MySQL的内置库对于数据库管理员和开发者来说是非常重要的,它们提供了丰富的功能和工具,有助于更好地管理和优化数据库。
MySQL中包含了多个系统库,这些库为MySQL的运行和管理提供了重要的信息和功能。当我们安装完成mysql后,登录到服务端,使用 show databases;
命令查看已经安装的数据库(也就是我们常说的系统库自带的系统库),下面查询的是系统库和我已经创建的 db_test
数据库。
Aion ~ $ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.31 Homebrew
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql> show databases;
+---------------------+
| Database |
+---------------------+
| db_test |
| information_schema |
| mysql |
| performance_schema |
| sys |
+---------------------+
5 rows in set (0.01 sec)
mysql>
2005年10月MySQL 5.0发布,MySQL 5.0是MySQL数据库管理系统的一个重要版本(针对MySQL的系统库,在MySQL创建的开始,就已经存有两个核心库,分别是mysql库和information_schema库
,我能追溯到的系统库的版本信息也就是在这里以及以前的版本)。
2010年MySQL 5.5的发布,MySQL 5.5引入了performance_schema库
,用于监控MySQL服务器的性能,帮助管理员和开发者更好地了解数据库的运行状态。默认performance_schema库
是关闭状态,如果需要使用performance_schema库
需要在配置文件进行配置开启使用,
2013年MySQL 5.6版本发布,在MySQL 5.6中,performance_schema库
默认是打开的。从MySQL 5.6开始,performance_schema默认启用,以提供对MySQL服务器性能的监控功能。然而,在某些特定安装或配置中,它可能会被手动关闭。2021年停止了对 MySQL 5.6.x 版本更新支持。
2015年,MySQL在5.7.6版本中引入的 sys库
。所以,从MySQL 5.7.6开始,用户就可以使用 sys库
来更方便地管理和监控MySQL服务器了,虽然sys库为管理员和开发者提供了很多便利,但它并不是MySQL的核心组件,因此在某些特定的MySQL安装或配置中,可能会选择不安装或禁用sys库。如果你正在使用的MySQL版本高于5.7.6,但找不到sys库,那么可能是因为它被禁用了或者没有正确安装。
当前所有操作均在都在 MySQL 8.0.31 中执行,如果有出入,还望指出。
操作环境:
information_schema库保存了MySQL服务器维护的所有其他数据库的信息,如 库结构信息(SCHEMATA)
、 表的结构(TABLES)
、视图(VIEWS)
、触发器(EVENTS、TRIGGERS)
、列(COLUMNS)
、索引
等。这些都是描述性信息,通常被称为元数据。通过查询这个数据库,可以获得关于数据库结构和其他相关信息的详细视图。
mysql> use information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| ADMINISTRABLE_ROLE_AUTHORIZATIONS |
| APPLICABLE_ROLES |
| CHARACTER_SETS |
| CHECK_CONSTRAINTS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLLATIONS |
| COLUMN_PRIVILEGES |
| COLUMN_STATISTICS |
| COLUMNS |
| COLUMNS_EXTENSIONS |
| ENABLED_ROLES |
| ENGINES |
| EVENTS |
| FILES |
| INNODB_BUFFER_PAGE |
| INNODB_BUFFER_PAGE_LRU |
| INNODB_BUFFER_POOL_STATS |
| INNODB_CACHED_INDEXES |
| INNODB_CMP |
| INNODB_CMP_PER_INDEX |
| INNODB_CMP_PER_INDEX_RESET |
| INNODB_CMP_RESET |
| INNODB_CMPMEM |
| INNODB_CMPMEM_RESET |
| INNODB_COLUMNS |
| INNODB_DATAFILES |
| INNODB_FIELDS |
| INNODB_FOREIGN |
| INNODB_FOREIGN_COLS |
| INNODB_FT_BEING_DELETED |
| INNODB_FT_CONFIG |
| INNODB_FT_DEFAULT_STOPWORD |
| INNODB_FT_DELETED |
| INNODB_FT_INDEX_CACHE |
| INNODB_FT_INDEX_TABLE |
| INNODB_INDEXES |
| INNODB_METRICS |
| INNODB_SESSION_TEMP_TABLESPACES |
| INNODB_TABLES |
| INNODB_TABLESPACES |
| INNODB_TABLESPACES_BRIEF |
| INNODB_TABLESTATS |
| INNODB_TEMP_TABLE_INFO |
| INNODB_TRX |
| INNODB_VIRTUAL |
| KEY_COLUMN_USAGE |
| KEYWORDS |
| OPTIMIZER_TRACE |
| PARAMETERS |
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
| PROFILING |
| REFERENTIAL_CONSTRAINTS |
| RESOURCE_GROUPS |
| ROLE_COLUMN_GRANTS |
| ROLE_ROUTINE_GRANTS |
| ROLE_TABLE_GRANTS |
| ROUTINES |
| SCHEMA_PRIVILEGES |
| SCHEMATA |
| SCHEMATA_EXTENSIONS |
| ST_GEOMETRY_COLUMNS |
| ST_SPATIAL_REFERENCE_SYSTEMS |
| ST_UNITS_OF_MEASURE |
| STATISTICS |
| TABLE_CONSTRAINTS |
| TABLE_CONSTRAINTS_EXTENSIONS |
| TABLE_PRIVILEGES |
| TABLES |
| TABLES_EXTENSIONS |
| TABLESPACES |
| TABLESPACES_EXTENSIONS |
| TRIGGERS |
| USER_ATTRIBUTES |
| USER_PRIVILEGES |
| VIEW_ROUTINE_USAGE |
| VIEW_TABLE_USAGE |
| VIEWS |
+---------------------------------------+
79 rows in set (0.00 sec)
mysql>
举例说明,例如我们想查询数据库的相关信息,可以从 information_schema.SCHEMATA
中查询。从下面的查询中,我们可以清楚的了解到目录名称、库(模式)名称、默认字符集名称、默认排序字符集名称、是否默认加密等。
SCHEMATA
表主要用于库统计信息。
mysql> select * from SCHEMATA;
+--------------+---------------------+----------------------------+------------------------+----------+--------------------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | DEFAULT_ENCRYPTION |
+--------------+---------------------+----------------------------+------------------------+----------+--------------------+
| def | mysql | utf8mb4 | utf8mb4_general_ci | NULL | NO |
| def | information_schema | utf8mb3 | utf8mb3_general_ci | NULL | NO |
| def | performance_schema | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO |
| def | sys | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO |
| def | db_test | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO |
+--------------+---------------------+----------------------------+------------------------+----------+--------------------+
5 rows in set (0.00 sec)
mysql>
举例说明,例如我们想查询数据库中相关表信息,那么可以从 information_schema.TABLES
中查询。从下面的表结构中,我们可以看到表所属库(模式)、表名称、表类型(基本表BASE TABLE或视图 VIEW)、使用的存储引擎、版本、行格式、表行数、数据长度、最大数据长度、索引长度、创建时间、更新时间、检查时间、创建选项、表备注等信息。
TABLES表主要用于各种统计信息,以便进行性能调优、故障排除或业务数据审计。
其他信息,如果感兴趣,可以自行查询比较,此处不在一一展示。
mysql库主要存储了MySQL的用户账户和权限信息,以及存储过程、事件的定义信息,还有运行过程中产生的日志信息、帮助信息以及时区信息等。它是MySQL的核心数据库之一,管理着数据库的安全性和其他关键设置。
mysql.user
表是 MySQL 数据库中用于存储用户信息的表。它包含了关于每个 MySQL 用户账户的重要信息,以便进行身份验证和权限控制。使用desc mysql.user; 可以查看user表的结构信息,主要有登录主机、登录用户名、登录密码、各类权限(查询、插入、更新、删除、创建、授权)、安全证书、密码安全和过期、连接数和用户连接数等。
mysql> desc user;
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(255) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int unsigned | NO | | 0 | |
| max_updates | int unsigned | NO | | 0 | |
| max_connections | int unsigned | NO | | 0 | |
| max_user_connections | int unsigned | NO | | 0 | |
| plugin | char(64) | NO | | caching_sha2_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint unsigned | YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
| Create_role_priv | enum('N','Y') | NO | | N | |
| Drop_role_priv | enum('N','Y') | NO | | N | |
| Password_reuse_history | smallint unsigned | YES | | NULL | |
| Password_reuse_time | smallint unsigned | YES | | NULL | |
| Password_require_current | enum('N','Y') | YES | | NULL | |
| User_attributes | json | YES | | NULL | |
+--------------------------+-----------------------------------+------+-----+-----------------------+-------+
51 rows in set (0.00 sec)
mysql>
mysql.db 表
可以查询存储数据库级别的权限信息,记录了哪些用户(User)对哪些数据库(Db)拥有哪些权限(例如 SELECT、INSERT、UPDATE、DELETE 等)。对于运维管理员来说,mysql.db 表方便地管理和控制用户对各个数据库的访问权限。
mysql> desc db;
+-----------------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host | char(255) | NO | PRI | | |
| Db | char(64) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
+-----------------------+---------------+------+-----+---------+-------+
22 rows in set (0.00 sec)
mysql>
mysql> select * from mysql.user \G;
*************************** 7. row ***************************
Host: localhost
User: root
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
ssl_type:
ssl_cipher: 0x
x509_issuer: 0x
x509_subject: 0x
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *********************
password_expired: N
password_last_changed: 2024-03-17 19:17:35
password_lifetime: NULL
account_locked: N
Create_role_priv: Y
Drop_role_priv: Y
Password_reuse_history: NULL
Password_reuse_time: NULL
Password_require_current: NULL
User_attributes: NULL
performance_schema库主要用于保存MySQL服务器运行过程中的状态信息,提供了对MySQL服务器性能的监控功能。performance_schema库可以统计最近执行的语句、执行过程中的时间消耗、内存使用情况等信息,帮助管理员和开发者了解数据库的性能状况。
mysql> show tables;
+------------------------------------------------------+
| Tables_in_performance_schema |
+------------------------------------------------------+
| accounts |
| binary_log_transaction_compression_stats |
| cond_instances |
| data_lock_waits |
| data_locks |
| error_log |
| events_errors_summary_by_account_by_error |
| events_errors_summary_by_host_by_error |
| events_errors_summary_by_thread_by_error |
| events_errors_summary_by_user_by_error |
| events_errors_summary_global_by_error |
| events_stages_current |
| events_stages_history |
| events_stages_history_long |
| events_stages_summary_by_account_by_event_name |
| events_stages_summary_by_host_by_event_name |
| events_stages_summary_by_thread_by_event_name |
| events_stages_summary_by_user_by_event_name |
| events_stages_summary_global_by_event_name |
| events_statements_current |
| events_statements_histogram_by_digest |
| events_statements_histogram_global |
| events_statements_history |
| events_statements_history_long |
| events_statements_summary_by_account_by_event_name |
| events_statements_summary_by_digest |
| events_statements_summary_by_host_by_event_name |
| events_statements_summary_by_program |
| events_statements_summary_by_thread_by_event_name |
| events_statements_summary_by_user_by_event_name |
| events_statements_summary_global_by_event_name |
| events_transactions_current |
| events_transactions_history |
| events_transactions_history_long |
| events_transactions_summary_by_account_by_event_name |
| events_transactions_summary_by_host_by_event_name |
| events_transactions_summary_by_thread_by_event_name |
| events_transactions_summary_by_user_by_event_name |
| events_transactions_summary_global_by_event_name |
| events_waits_current |
| events_waits_history |
| events_waits_history_long |
| events_waits_summary_by_account_by_event_name |
| events_waits_summary_by_host_by_event_name |
| events_waits_summary_by_instance |
| events_waits_summary_by_thread_by_event_name |
| events_waits_summary_by_user_by_event_name |
| events_waits_summary_global_by_event_name |
| file_instances |
| file_summary_by_event_name |
| file_summary_by_instance |
| global_status |
| global_variables |
| host_cache |
| hosts |
| innodb_redo_log_files |
| keyring_component_status |
| keyring_keys |
| log_status |
| memory_summary_by_account_by_event_name |
| memory_summary_by_host_by_event_name |
| memory_summary_by_thread_by_event_name |
| memory_summary_by_user_by_event_name |
| memory_summary_global_by_event_name |
| metadata_locks |
| mutex_instances |
| objects_summary_global_by_type |
| performance_timers |
| persisted_variables |
| prepared_statements_instances |
| processlist |
| replication_applier_configuration |
| replication_applier_filters |
| replication_applier_global_filters |
| replication_applier_status |
| replication_applier_status_by_coordinator |
| replication_applier_status_by_worker |
| replication_asynchronous_connection_failover |
| replication_asynchronous_connection_failover_managed |
| replication_connection_configuration |
| replication_connection_status |
| replication_group_member_stats |
| replication_group_members |
| rwlock_instances |
| session_account_connect_attrs |
| session_connect_attrs |
| session_status |
| session_variables |
| setup_actors |
| setup_consumers |
| setup_instruments |
| setup_objects |
| setup_threads |
| socket_instances |
| socket_summary_by_event_name |
| socket_summary_by_instance |
| status_by_account |
| status_by_host |
| status_by_thread |
| status_by_user |
| table_handles |
| table_io_waits_summary_by_index_usage |
| table_io_waits_summary_by_table |
| table_lock_waits_summary_by_table |
| threads |
| tls_channel_status |
| user_defined_functions |
| user_variables_by_thread |
| users |
| variables_by_thread |
| variables_info |
+------------------------------------------------------+
111 rows in set (0.01 sec)
mysql>
performance_schema.error 表允许开发人员使用简单的 SQL 查询来读取错误日志的内容。这个特性是从 MySQL 8.0.22 版本开始引入的,旨在克服传统错误日志在读取和过滤方面的局限性。performance_schema.error 表同mysql.slow_log表和mysql.general_log表都可以协助运维人员或者管理员排查一些运行错误,以便更好地进行性能分析和故障排查。
mysql> select * from error_log limit 1 \G;
*************************** 1. row ***************************
LOGGED: 2024-03-17 18:59:54.434370
THREAD_ID: 0
PRIO: Warning
ERROR_CODE: MY-010918
SUBSYSTEM: Server
DATA: 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
sys库通过视图、函数和存储过程的形式将information_schema和performance_schema结合起来,提供了更直观、更方便的接口来查看MySQL服务器的性能信息。它使得程序员和数据库管理员能够更容易地理解数据库的运行状态。
mysql> select TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE from information_schema.TABLES where TABLE_SCHEMA = 'sys' limit 10;
+--------------+-----------------------------------+------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE |
+--------------+-----------------------------------+------------+
| sys | host_summary | VIEW |
| sys | host_summary_by_file_io | VIEW |
| sys | host_summary_by_file_io_type | VIEW |
| sys | host_summary_by_stages | VIEW |
| sys | host_summary_by_statement_latency | VIEW |
| sys | host_summary_by_statement_type | VIEW |
| sys | innodb_buffer_stats_by_schema | VIEW |
| sys | innodb_buffer_stats_by_table | VIEW |
| sys | innodb_lock_waits | VIEW |
| sys | io_by_thread_by_latency | VIEW |
+--------------+-----------------------------------+------------+
10 rows in set (0.00 sec)
mysql>
安装好MySQL之后,在MySQL的内部默认情况下有四个内置库,他们分别mysql、information_schema、performance_schema和sys库。他们主要用于用户管理和权限控制、
性能监控和优化、故障排查和问题定位、数据分析和决策支持。
[引用]
3、SYS
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。