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

291dc5b66f49ec088260791c7e6d7227.png

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

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  等版本均发现这个问题.

be965120caac1a892ca4f819da04da52.png

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

分析过程

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

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

5579f587295d08345cf1d652ad8b3c64.png

8754fa512e592960486885cadf3f57e7.png

有意思的事情是,在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的知识。

a17e2363a2eb00845cdda8986b747a06.png

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

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

9d0fd90117b8139852425908ce6e7cd9.png

主要的问题在于

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

1029fdfaa3cec18cb776539881193076.png

5cab57fcfc015338dd83eb8223addd38.png

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

e25be4a558dfe684440efd2ead956626.png

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

87d0d18441b8bb28eccf758d3ad5f326.png

85d4e24172355a89b0837f2bf659880c.png

ea390af5fcbe3bbecfdb953bdd64e383.png

基于上面的的方案,我们不建议在不进行严格测试的情况下,修改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 在这个值增加提示,或禁止修改此值。

9f2e7d79946aa743d6c9a41baf9a2a60.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值