You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在MariaDB 10.6主节点授予REPLICA MONITOR权限问题排查

MariaDB 10.6主节点REPLICA MONITOR权限无法生效问题排查

背景

我们近期将旧的MariaDB 10.3主节点替换为一台运行10.6.x版本的副本节点,原本期望解决创建副本后出现的主从异常问题,却遇到了权限相关的新故障。

权限变更梳理

  • MariaDB 10.3中,执行SHOW REPLICA STATUS(原SHOW SLAVE STATUS)需用户拥有REPLICATION CLIENT权限
  • 10.5.2版本起,REPLICATION CLIENT更名为BINLOG MONITOR,但10.5之后BINLOG MONITOR不再包含SHOW REPLICA STATUS权限,需使用REPLICA MONITOR权限

旧问题(10.3主节点阶段)

旧10.3主节点不存在REPLICA MONITOR权限,无法给用户授予该权限;而授予的REPLICATION CLIENT权限在10.6副本节点上不足以执行SHOW REPLICA STATUS,因此我们将10.6副本节点提升为新主节点。

新问题(10.6主节点阶段)

在10.6新主节点上执行GRANT REPLICA MONITOR ON *.* TO 'user'@'host';时无报错,但执行FLUSH PRIVILEGES后用SHOW GRANTS FOR 'user'@'host';查看,该权限并未生效。尝试授予旧名称SLAVE MONITOR也无效,仅BINLOG MONITOR可正常授予,但仍无法执行SHOW REPLICA STATUS。

可能原因及解决方向

  1. 权限表结构未更新
    升级或故障转移后,mysql库中的权限表(如mysql.user、mysql.global_priv)可能未完成结构更新。10.6版本新增了REPLICA MONITOR对应的权限字段,若表结构还是10.3版本的,会导致权限无法写入。

    • 执行mysql_upgrade -u root -p命令,强制更新系统表结构,完成后重启MariaDB服务。
  2. 全局权限表(global_priv)优先级问题
    MariaDB 10.4及以上版本默认使用mysql.global_priv表存储权限(基于JSON格式),而旧的mysql.user表作为兼容保留。若授予权限时未正确写入global_priv,会导致权限不生效。

    • 可以尝试直接修改global_priv表添加权限,或者使用ALTER USER 'user'@'host' GRANT REPLICA MONITOR;替代GRANT命令,后者更适配新的权限存储机制。
  3. 系统变量配置影响
    检查是否存在sql_mode设置导致权限语句解析异常,或者read_only等变量限制了权限修改。

    • 执行SHOW VARIABLES LIKE 'sql_mode';和SHOW VARIABLES LIKE 'read_only';确认配置,必要时调整后重启服务。
  4. 权限授予范围问题
    确保授予权限时使用了正确的范围,REPLICA MONITOR是全局权限,需使用ON *.*,不能指定单个数据库。


内容的提问来源于stack exchange,提问作者DNate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:45:59