云托管服务开通 MySQL 后, 数据库的全局隔离级别为 READ-COMMITTED , 而非MySQL默认的 REPEATABLE READ . 尝试通过命令
set global transaction isolation level repeatable read;
修改, 结果报了
执行结果:失败耗时:10 ms
失败原因:ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation[1227] [205d80a2-2798-245f-2297-1880065736dc]
的错误. 且与控制台没有找到任何有关隔离级别的设置项, 请问如果进行全局设置?
set global transaction isolation level repeatable read;
1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation
发工单问了一下,腾讯打电话来,全局隔离级别必须他们来手动修改,微信云托管没有这个参数,腾讯云控制台也没有.
经过一夜的上google百度一下, 问题终于解决了, 这里自问自答一下, 算是做个小笔记吧.
其实错误提示已经说得很清楚了, 设置全局配置 (set global) 需要帐号拥有 SYSTEM_VARIABLES_ADMIN 权限. MySQL 的权限分为静态权限和动态权限, 动态权限需要通过SQL语句获取, 而 SYSTEM_VARIABLES_ADMIN 属于动态权限, 因此需要执行
GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO 'root'@'%';
获取修改全局配置的权限. (此处使用root帐号仅为说明方便, 实践中不建议直接使用root帐号)
执行成功后, 使用获取到该权限的帐号(此处为root) 执行
set global transaction isolation level repeatable read;
即可.
ref. https://dev.mysql.com/doc/refman/8.0/en/grant.html#grant-global-privileges