RDS MySQL出现“The incident LOST_EVENTS occured on the master”报错

更新时间:2025-03-07 10:00:12

本文主要针对RDS MySQL 5.65.7版本,解决主备复制因批量执行GRANTREVOKE权限时失败而引发的LOST_EVENTS中断问题。

现象描述

RDS MySQL主备复制中断,出现如下报错:

The incident LOST_EVENTS occured on the master. Message: REVOKE/GRANT failed while granting/revoking privileges in databases. 
Error_code: 1590

image

问题原因

RDS MySQL 5.65.7版本中,GRANTREVOKE 操作对多个用户的权限变更是非原子性的。如果其中一个用户因不存在或语法错误等原因导致操作失败,主库会认为整个操作不可靠,为了避免将失败的语句同步到备库,主库会在Binlog中插入一个LOST_EVENTS事件,导致备库在应用日志时中断复制关系。

例如,如下命令会导致主备复制中断:

如果testuser1存在但testuser2不存在,主库会记录LOST_EVENTS事件,从而中断主备复制。

REVOKE SELECT ON db1.* FROM 'testuser1'@'%','testuser2'@'%';

image

解决方案

若主备复制已中断,系统将自动尝试修复,但这一过程可能需一定时间。您可稍后通过如下SQL查询主备复制状态是否已恢复正常:

SHOW SLAVE STATUS;
  • 若已恢复正常,在后面操作中,请勿一次性对多个用户执行GRANTREVOKE操作,改为逐一处理每个用户。示例如下:

    REVOKE SELECT ON db1.* FROM 'testuser1'@'%';
    REVOKE SELECT ON db1.* FROM 'testuser2'@'%';
  • 若未恢复正常,请联系阿里云技术支持人员处理。

  • 本页导读 (1)
  • 现象描述
  • 问题原因
  • 解决方案