收藏
回答

云托管 MySQL 如何设置全局隔离级别?

云托管服务开通 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]

的错误. 且与控制台没有找到任何有关隔离级别的设置项, 请问如果进行全局设置?

回答关注问题邀请回答
收藏

2 个回答

  • DQ
    DQ
    2023-05-12
    set global transaction isolation level repeatable read;
    

    1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation

    发工单问了一下,腾讯打电话来,全局隔离级别必须他们来手动修改,微信云托管没有这个参数,腾讯云控制台也没有.

    2023-05-12
    有用
    回复 1
    • Reginald
      Reginald
      2023-06-08
      感谢解惑. 亲测了一下, 先获取动态权限再改全局隔离级别是有效的, 但会在数据库重启(包括自动暂停)后重置, 故如果想一劳永逸估计都是要去求客服了.
      2023-06-08
      回复
  • Reginald
    Reginald
    2023-05-10

    经过一夜的上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

    2023-05-10
    有用
    回复
登录 后发表内容
问题标签