本文主要针对RDS MySQL 5.6和5.7版本,解决主备复制因批量执行GRANT
或REVOKE
权限时失败而引发的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
问题原因
在RDS MySQL 5.6和5.7版本中,GRANT
或 REVOKE
操作对多个用户的权限变更是非原子性的。如果其中一个用户因不存在或语法错误等原因导致操作失败,主库会认为整个操作不可靠,为了避免将失败的语句同步到备库,主库会在Binlog中插入一个LOST_EVENTS
事件,导致备库在应用日志时中断复制关系。
例如,如下命令会导致主备复制中断:
如果testuser1
存在但testuser2
不存在,主库会记录LOST_EVENTS
事件,从而中断主备复制。
REVOKE SELECT ON db1.* FROM 'testuser1'@'%','testuser2'@'%';
解决方案
若主备复制已中断,系统将自动尝试修复,但这一过程可能需一定时间。您可稍后通过如下SQL查询主备复制状态是否已恢复正常:
SHOW SLAVE STATUS;
若已恢复正常,在后面操作中,请勿一次性对多个用户执行
GRANT
或REVOKE
操作,改为逐一处理每个用户。示例如下:REVOKE SELECT ON db1.* FROM 'testuser1'@'%'; REVOKE SELECT ON db1.* FROM 'testuser2'@'%';
若未恢复正常,请联系阿里云技术支持人员处理。
该文章对您有帮助吗?
- 本页导读 (1)
- 现象描述
- 问题原因
- 解决方案