关于information_schema数据库

本文介绍了MySQL自带的information_schema数据库,它是获取数据库元数据的重要途径。文章详细解释了元数据的概念,并列举了information_schema中几个常用表的功能,如schemata、tables、COLUMNS等,帮助读者了解如何使用这些表来查询数据库、表和列的相关信息。

information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式.
什么是元数据呢?元数据是关于数据的数据,如数据库名、表名,列的数据类型,或访问权限等。元数据又称“数据词典”或“系统目录”。
此数据库中常用的几个表:
schemata:提供了当前mysql实例中所有数据库的信息.
tables:详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果.
schema: information_schema、performance_schema、keystone、cinder…
表类型:system_view、base table、view
表引擎:memory、innoDB、performance_schema…
表的记录数(列数)
COLUMNS:列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
列名称
所属表名
STATISTICS:索引表。提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表
CHARACTER_SETS:提供了mysql实例可用字符集的信息。是show character set结果集取之此表。
character_set_name:字符集名称
default_collate_name:默认校对集名称
maxlen:最大长度, 存储一个字符的最大长度
举例:
utf8 utf8_general_ci 3
ps:字符集是啥呢?这里的字符集包含了编码规则,utf8是对unicode字符集,进行utf8的编码,一个字符最大用3个字符编码。(utf的编码长度为1~3)

COLLATIONS:提供了关于各字符集的对照信息。通常情况下,一个字符集对应有多个校对集。
collation_name:校对集名称
character_set_name:字符集名称
is_default:是否默认
is_compiled: 表示该collation所对应的character set是否被编译到此mysql数据库
sortlen: 要在内存中排序时,该字符集的字符要占用多少个字节。
比如:
utf8_general_ci utf8 Yes Yes 1
utf8_bin utf8 No Yes 1
utf8_unicode_ci utf8 No Yes 8

同一个 character set 的不同 collation 的区别在于排序、字符对比的准确度(相同两个字符在不同国家的语言中的排序规则可能是不同的)以及性能。ci为case insensitive,大小写不敏感, cs为case sensitive,大小写敏感,utf_bin是二进制。
例如:
utf8_general_ci 在排序的准确度上要逊于 utf8_unicode_ci, 但性能上(排序以及比对速度)要略优于 utf8_unicode_ci.

<think>好的,我现在需要帮助用户解决关于information_schema数据库中视图的权限或结构问题。用户提到“视图不存在或权限问题”,我需要结合之前的对话和用户提供的引用来分析解决方案。 首先,回顾之前的回答,用户的问题是关于修改information_schema虚拟表权限无效的情况。现在用户进一步询问关于该数据库中视图的权限或结构问题,特别是视图不存在或权限问题的解决方案。 查看用户提供的引用,引用[1]提到普通用户看不到information_schema数据库,尝试授权时会出错,这可能涉及权限设置问题。引用[2]说明information_schema中的表是只读视图,无法直接修改,这与之前的问题相关。引用[3]涉及查询结构,可能和视图的访问方式有关。 接下来,我需要确定用户的具体问题。用户可能遇到两种情况:一是试图访问information_schema中的视图时提示不存在,二是权限不足导致无法访问。需要分别分析原因并提供解决方案。 首先,视图不存在的情况。根据引用[2],information_schema中的表实际上是视图,但MySQL不同版本可能有结构变化。用户可能在旧版本中查询新版本才有的视图,或者视图名称拼写错误。需要建议用户检查版本和拼写,或者使用替代方法如sys库。 其次,权限问题。引用[1]提到授权给用户时出错,因为information_schema本身权限无法直接修改,必须通过底层物理表权限控制。需要指导用户正确授权SELECT权限到具体数据库或表,而不是information_schema本身。 另外,用户可能误以为需要特殊权限访问这些视图,但实际上普通用户默认有权限,除非被显式拒绝。需要检查用户权限是否被错误地限制,或者是否有全局权限如SELECT_ACL被回收。 还需要考虑系统表损坏的情况,虽然少见,但可能需要修复或升级MySQL。此外,使用中间件时权限可能由中间件控制,需要调整中间件配置而不是直接修改数据库权限。 最后,确保用户验证步骤,如检查权限、测试访问、查看日志等,以确认解决方案是否有效。同时,生成相关问题帮助用户深入理解。</think>根据MySQL系统权限管理机制和$information\_schema$特性,针对视图访问问题提供以下解决方案: --- ### 一、视图"不存在"问题诊断 1. **版本兼容性验证** 使用`SELECT VERSION()`确认MySQL版本,部分视图(如$INNODB_METRICS$)仅在5.7+版本存在[^2] 2. **视图名称规范校验** ```sql SHOW TABLES IN information_schema LIKE 'VIEWS'; -- 注意视图名称全大写 ``` 3. **元数据损坏修复** ```bash mysqlcheck --analyze --databases information_schema # 检查系统表完整性 mysqldump --skip-lock-tables information_schema > is_backup.sql # 备份元数据 ``` --- ### 二、权限问题分层解决 #### 1. 基础权限配置 ```sql -- 授予全局查询权限(慎用) GRANT SELECT ON *.* TO 'user'@'%'; -- 精确到库级权限(推荐) GRANT SELECT ON `target_db`.* TO 'app_user'@'10.0.%'; FLUSH PRIVILEGES; -- 强制权限更新[^1] ``` #### 2. 特殊权限回收场景 ```sql -- 检查被拒绝的权限(重点观察SELECT_ACL) SELECT * FROM mysql.user WHERE User='problem_user' AND Host='%'\G -- 修复被错误回收的权限 UPDATE mysql.user SET Select_priv='Y' WHERE User='problem_user'; ``` --- ### 三、视图结构访问限制突破 #### 1. 使用替代系统视图 ```sql -- 转换到sys库查询(需5.7+版本) GRANT SELECT ON sys.* TO 'user'@'localhost'; SELECT * FROM sys.schema_tables_with_full_table_scans; -- 替代$information_schema.TABLES$ ``` #### 2. 建立代理视图 ```sql CREATE VIEW my_meta AS SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='prod_db'; GRANT SELECT ON my_meta TO 'report_user'@'%'; -- 实现细粒度控制[^3] ``` --- ### 四、操作验证流程 1. **权限验证** ```sql SHOW GRANTS FOR 'user'@'host'; -- 确认SELECT权限存在 ``` 2. **直接访问测试** ```sql SELECT COUNT(*) FROM information_schema.VIEWS; -- 验证基础访问能力 ``` 3. **错误日志分析** ```bash grep -i 'access denied' /var/log/mysql/mysql.log # 定位权限拒绝记录 ``` --- ### 五、特殊场景处理 #### 1. 分布式架构(如Galera Cluster) 通过`wsrep_sync_wait`参数确保权限变更同步: ```sql SET GLOBAL wsrep_sync_wait=7; -- 强制同步元数据变更[^1] ``` #### 2. 云数据库(如AWS RDS) 使用内置存储过程更新权限: ```sql CALL mysql.rds_set_master_acl('user','host',TRUE); -- AWS专用权限同步命令 ``` --- --相关问题--: 1. 如何通过$sys$库实现比$information\_schema$更安全的元数据查询? 2. MySQL 8.0中$information\_schema$与数据字典的关联机制是什么? 3. 在多主复制环境中如何保证权限变更的原子性?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值