暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

运维实践|浅谈mysql系统库

原创 Aion 2024-03-24
410

前言

前几篇多多少少学习了一些MySQL相关的知识,例如安装、配置、字符集等,本篇想要介绍下安装好的MySQL有哪些数据库。了解MySQL的内置库对于数据库管理员和开发者来说是非常重要的,它们提供了丰富的功能和工具,有助于更好地管理和优化数据库。
image.png

系统库有哪些

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>

系统库的历史

image.png

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 中执行,如果有出入,还望指出。
操作环境:
● 操作系统:MacOS 13.2
● MySQL版本:MySQL 8.0.31
● 安装MySQL方式:Homebrew

information_schema库

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表主要用于各种统计信息,以便进行性能调优、故障排除或业务数据审计。
image.png

其他信息,如果感兴趣,可以自行查询比较,此处不在一一展示。

mysql库

mysql库主要存储了MySQL的用户账户和权限信息,以及存储过程、事件的定义信息,还有运行过程中产生的日志信息、帮助信息以及时区信息等。它是MySQL的核心数据库之一,管理着数据库的安全性和其他关键设置。
image.png

查询用户信息

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库

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库

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库。他们主要用于用户管理和权限控制、
性能监控和优化、故障排查和问题定位、数据分析和决策支持。


[引用]
1、INFORMATION_SCHEMA
2、PERFORMANCE_SCHEMA
3、SYS
4、MySQL维基百科

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论