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

MYSQL 字符集设置错误导致SYS库无法读取的故障,提请官方BUG 与 我们认为POLARDB 可以改善它

AustinDatabases 2022-06-11
752



先说重点什么东西,怎么发现的这个问题


1  POLARDB for  mysql  8.01  (8.013) 版本开放了 default_collation_for_utf8mb4  的参数给用户,用户设置了值错误的值后,导致sys库无法访问。


我们认为阿里云POLARDB FOR MYSQL 应该将这个参数在控制台关闭设置,或提醒用户这样的设置会导致sys库不可用。


并且我们将这个问题反馈了给MYSQL 官方,因为我们在官版的 mysql 8.027 8.013,POLARDB 8.01  等版本均发现这个问题.

https://bugs.mysql.com/bug.php?id=107538&thanks=4

分析过程

——————————————————————————————

阿里云的POLARDB for mysql 8.01 开始在用了,在使用中发现了一个问题,对SYS库中的表进行查询的过程中,发现报错。




有意思的事情是,在POLARDB FOR MYSQL 的测试库中没有出现这个问题,而生产库 13套均出现这个问题。 


首先通过查询performance_schema 里面的表都是OK的,没有问题,而sys库中的检索了几个表,都不可以


后发现问题的来源于collation设置的问题,之前使用过MYSQL 5.7 的同学都知道,5,7 默认的collection 是utf8_general_ci  而  mysql 8.0全面转向 utf8mb4 后整体的 collation是 utf8mb4_0900_ai_ci .


起因是我们团队的一位同学将这个值修改为 utf8_general_ci ,基于mysql 5.7的知识。




为此我们团队的小陈,安装了SANDBOX 并在自己的环境模拟POLARDB 的问题的复现。


下图为MYSQL 8.013 和 8.027 复现POLARDB 的问题,同样的错误信息。


主要的问题在于

下图中的参数 default_collation_for_utf8mb4 = utf8mb4_general_ci 这个位置



阿里的控制台中的POALRDB 的参数平台可以在这个位置调整相关值在这个位置也可以进行调整,在数据库初始化前调整这个值后,在创建数据库后sys库无法读取数据。



问题的主要原因是什么,团队中的陈乙升通过分析, 具体想要相关的分析与部分整改完整方案的可以 加微信号 c04280225 索取




基于上面的的方案,我们不建议在不进行严格测试的情况下,修改global的default_collation_for_utf8mb4 的值,另外除了修改session级别的 default_collation_for_utf8mb4 的值的情况外,我们还可以针对 sys库中的表的collation 进行修改,满足对部分sys 库表的查询需求。


后续还会继续在有时间的情况下对测试数据库整体的default_collation_for_utf8mb4进行修改,查看是否对测试应用数据库有无影响。


最后建议,mysql 8的数据库用户不要轻易去修改default_collation_for_utf8mb4 的值,尽量让值保持在 utf8mb4_0900_ai_ci, 另外建议阿里云 POLARDB 在这个值增加提示,或禁止修改此值。




文章转载自AustinDatabases,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论