文章目录
- [4. mysql System Schema (mysql系统库)](#4. mysql System Schema (mysql系统库))
-
- [4.1 数据字典](#4.1 数据字典)
- [4.2 系统表](#4.2 系统表)
-
- [4.2.1 权限授予系统表](#4.2.1 权限授予系统表)
- [4.2.2 对象信息系统表](#4.2.2 对象信息系统表)
- [4.2.3 日志系统表](#4.2.3 日志系统表)
- [4.2.4 服务器端帮助系统表](#4.2.4 服务器端帮助系统表)
- [4.2.5 时区系统表](#4.2.5 时区系统表)
- [4.2.6 复制系统表](#4.2.6 复制系统表)
- [4.2.7 优化器系统表](#4.2.7 优化器系统表)
- [4.2.8 杂项系统表](#4.2.8 杂项系统表)
4. mysql System Schema (mysql系统库)
Mysql Schema是一个系统库,表中存储了MySQL服务器运行时所需的信息。广义上,mysql schema包含存储数据库对象元数据的数据字典和用于其他操作目的的系统表。数据字典表和系统表位于数据目录下一个名为mysql.ibd的表空间文件中,使用的是InnoDB存储引擎。
4.1 数据字典
MySQL的数据字典,用来存储有关数据库对象自身的信息,不可以随意修改,否则可能造成服务器无法运行:以下列出几个常见的数据字典表:
character_sets:有关可用字符集的信息
check_constraints:有关表上定义的CHECK约束的信息
collations:每个字符集的排序规则信息
column_type_elements:列类型的信息
columns:有关表中列的信息
indexes: 有关表索引的信息
tables:有关数据库中表的信息
tablespace_files:有关表空间使用的文件信息
tablespaces:有关活动表空间的信息
triggers:有关触发器的信息数据字典表是受保护的,只能在调试版本中访问,在发行版中没有权限访问,如果在发行版本中查询表中的数据,出提示拒绝访问:
mysql
mysql> select * from mysql.character_sets; # 访问可用字符集的信息
ERROR 3554 (HY000): Access to data dictionary table 'mysql.catalogs' is rejected.
INFORMATION_SCHEMA实现了某些数据字典的视图,可以通过视图查看某些数据字典的内容:
mysql
# 通过INFORMATION_SCHEMA中的视图访问可用字符集的信息
mysql> SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS;
+--------------------+----------------------+---------------------------------+--------+
| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION | MAXLEN |
+--------------------+----------------------+---------------------------------+--------+
| big5 | big5_chinese_ci | Big5 Traditional Chinese | 2 |
| dec8 | dec8_swedish_ci | DEC West European | 1 |
| cp850 | cp850_general_ci | DOS West European | 1 |
| hp8 | hp8_english_ci | HP West European | 1 |
| koi8r | koi8r_general_ci | KOI8-R Relcom Russian | 1 |
| latin1 | latin1_swedish_ci | cp1252 West European | 1 |
| latin2 | latin2_general_ci | ISO 8859-2 Central European | 1 |
| swe7 | swe7_swedish_ci | 7bit Swedish | 1 |
| ascii | ascii_general_ci | US ASCII | 1 |
| ujis | ujis_japanese_ci | EUC-JP Japanese | 3 |
| sjis | sjis_japanese_ci | Shift-JIS Japanese | 2 |
| hebrew | hebrew_general_ci | ISO 8859-8 Hebrew | 1 |
| tis620 | tis620_thai_ci | TIS620 Thai | 1 |
| euckr | euckr_korean_ci | EUC-KR Korean | 2 |
| koi8u | koi8u_general_ci | KOI8-U Ukrainian | 1 |
| gb2312 | gb2312_chinese_ci | GB2312 Simplified Chinese | 2 |
| greek | greek_general_ci | ISO 8859-7 Greek | 1 |
| cp1250 | cp1250_general_ci | Windows Central European | 1 |
| gbk | gbk_chinese_ci | GBK Simplified Chinese | 2 |
| latin5 | latin5_turkish_ci | ISO 8859-9 Turkish | 1 |
| armscii8 | armscii8_general_ci | ARMSCII-8 Armenian | 1 |
| utf8mb3 | utf8mb3_general_ci | UTF-8 Unicode | 3 |
| ucs2 | ucs2_general_ci | UCS-2 Unicode | 2 |
| cp866 | cp866_general_ci | DOS Russian | 1 |
| keybcs2 | keybcs2_general_ci | DOS Kamenicky Czech-Slovak | 1 |
| macce | macce_general_ci | Mac Central European | 1 |
| macroman | macroman_general_ci | Mac West European | 1 |
| cp852 | cp852_general_ci | DOS Central European | 1 |
| latin7 | latin7_general_ci | ISO 8859-13 Baltic | 1 |
| cp1251 | cp1251_general_ci | Windows Cyrillic | 1 |
| utf16 | utf16_general_ci | UTF-16 Unicode | 4 |
| utf16le | utf16le_general_ci | UTF-16LE Unicode | 4 |
| cp1256 | cp1256_general_ci | Windows Arabic | 1 |
| cp1257 | cp1257_general_ci | Windows Baltic | 1 |
| utf32 | utf32_general_ci | UTF-32 Unicode | 4 |
| binary | binary | Binary pseudo charset | 1 |
| geostd8 | geostd8_general_ci | GEOSTD8 Georgian | 1 |
| cp932 | cp932_japanese_ci | SJIS for Windows Japanese | 2 |
| eucjpms | eucjpms_japanese_ci | UJIS for Windows Japanese | 3 |
| gb18030 | gb18030_chinese_ci | China National Standard GB18030 | 4 |
| utf8mb4 | utf8mb4_0900_ai_ci | UTF-8 Unicode | 4 |
+--------------------+----------------------+---------------------------------+--------+
41 rows in set (0.00 sec)
mysql>
4.2 系统表
系统表按功能大致可以分为以下几类:权限授予系统表、对象信息系统表、日志系统表、服务器端帮助系统表、时区系统表、复制系统表、优化器系统表、杂项系统表。
mysql系统库中的表如下所示:
mysql
mysql> use mysql;
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_mysql |
+------------------------------------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| replication_asynchronous_connection_failover |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version |
| replication_group_member_actions |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+------------------------------------------------------+
37 rows in set (0.00 sec)
mysql>
4.2.1 权限授予系统表
包含有关用户帐户及帐户拥有的权限授权信息,主要的表有:
user:用户帐户、全局权限和其他列。global_grants:为用户分配的动态全局权限;db:数据库级权限。tables_priv:表级权限。columns_priv: 列级权限。procs_priv: 存储过程和函数权限。proxies_priv: 代理用户权限。default_roles:列出了用户连接和认证后要激活的默认角色。role_edges:user表的关联表,区分user表中某一行记录是帐户还是角色password_history:密码更改的信息
4.2.2 对象信息系统表
包含有关组件、可加载的服务器插件和函数的信息:
component:使用INSTALL COMPONENT安装的服务器组件,表中列出了在服务器启动期间安装的组件。func: 使用CREATE FUNCTION安装的可加载函数,表中列出了在服务器启动期间加载的函数。plugin:使用INSTALL PLUGIN安装的服务器插件,表中列出了在服务器启动期间安装的插件。
4.2.3 日志系统表
服务器使用日志系统表进行日志记录:
general_log:一般查询日志表。slow_log:慢查询日志表。日志表使用
CSV存储引擎。
4.2.4 服务器端帮助系统表
包含服务器端帮助信息:
help_category:有关帮助类别的信息。help_keyword:与帮助主题关联的关键字。help_relation:帮助关键字和主题之间的映射。help_topic:帮助主题内容。
4.2.5 时区系统表
包含时区信息:
time_zone:时区ID以及是否使用闰秒。time_zone_leap_second:发生闰秒时如何修正。time_zone_name: 时区ID和名称之间的映射。time_zone_transition,time_zone_transition_type: 时区说明及偏移量。
4.2.6 复制系统表
服务器使用以下系统表来支持复制:
gtid_executed:用于存储GTID的值。ndb_binlog_index:用于NDB Cluster复制的二进制日志信息。只有在支持NDB CLUSTER的服务器才会创建此表,我们暂不讨论NDB的相关内容。slave_master_info,slave_relay_log_info,slave_worker_info: 用于存储从节点服务器上的复制信息。以上几张表都使用
InnoDB存储引擎。
4.2.7 优化器系统表
这些系统表供优化器使用:
innodb_index_stats,innodb_table_stats: 用于InnoDB的持久优化器统计信息。server_cost,engine_cost:优化器成本模型使用的表,包含查询期间发生的操作成本估算信息。server_cost包含服务器操作的优化器成本估算。engine_cost包含对特定存储引擎操作的估计。
4.2.8 杂项系统表
audit_log_filter,audit_log_user: 如果安装了MySQL Enterprise Audit,存储审计日志过滤器定义和用户帐户。firewall_group_allowlist,firewall_groups,firewall_memebership,firewall_users,firewall_whitelist:如果安装了MySQL Enterprise Firewall,这些存储表防火墙的使用信息。servers:由FEDERATED存储引擎使用。innodb_dynamic_metadata:由InnoDB存储引擎用来存储快速变化的表元数据,例如自动递增计数器值和索引树损坏标志。