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

问题描述

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

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

image

问题原因

MySQL 5.65.7版本中,当使用GRANTREVOKE一次性为多个用户设置权限时,如果某个用户的权限变更遇到问题,比如由于用户不存在或权限语法错误等原因。为了避免将失败的语句同步给备库,主库会主动向Binlog(用于复制的数据日志)中写入一个LOST_EVENT以此中断主备复制关系。

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

revoke select on db1.* from 'testuser1'@'%','testuser1'@'%';

image

解决方案

因为MySQL 5.65.7版本的DDL操作是非原子性的,为避免这种复制中断的问题,建议在使用GRANTREVOKE命令时,每次只处理一个用户,不要一次设置多个用户。

适用于

云数据库RDS MySQL